/*
TASK:matrix
LANG:C++
*/
# include<stdio.h>
# include <climits>
# define MAXN (1<<10)
# define hc 1765217
# define hc1 17321

int n,m,count;
int data[MAXN][MAXN];
unsigned long long p[MAXN],k[MAXN],l[MAXN];
int used[MAXN];

void hash(int red,int next) {
     k[red] += next;
     p[red] = (p[red]+(next%hc))%hc;
     l[red] = (l[red]+(next%hc1))%hc1;
}

void read() {
     scanf("%d %d", &n,&m);
     for(int i = 1; i <= n;i++) {
          p[i] = 0;
          l[i] = 0;
          k[i] = 0;
          for(int j = 1; j <= m; j++) {
               scanf("%d", &data[i][j]);
               hash(i,data[i][j]);
          }
           //printf("p = %lld k = %lld l = %lld\n", p[i],k[i],l[i]);
     }

}
void solve(int q) {
    //printf("%d ", q);
    count = 1;
    used[q] = q;
    int ok = 0;
    for(int i = q+1; i <= n; i++) {
         ok = 0;
         for(int j = q; j < i; j++)
             if(p[j] == p[i] &&k[j] == k[i] && l[j] == l[i]  && used[j] == q) {
                  ok = 1;
             }
         if(ok == 0     ) {
              // printf("%d ", i);
               count++;
               used[i] = q;
         }
    }
    //printf("\n");
}

int main() {
    int max = -1;
    read();
    //for(int i = 1; i <= n; i++) printf("%d ", p[i]);
    //printf("\n");
    for(int i = 1; i <= n; i++) {
        if(used[i]==0) solve(i);
        if(max < count) max = count;
    }
    printf("%d\n", max);
return 0;
}
