/*
TASK:matrix
LANG:C
*/
#include<stdio.h>
#define maxN (1<<10)

int A[maxN][maxN];
int code[maxN],used[maxN];
int n,m,best=0,cur=0;

int cmp(const void *a,const void *b)
{return *(int *)a - *(int *)b;}

void hash(int pos)
{
int res=0,j;
for (j=0;j<m;j++) res+=((j+1)*A[pos][j]);
code[pos] = res;
}

int main()
{
int i,j;
scanf("%d %d",&n,&m);
for (i=0;i<n;i++)
    for (j=0;j<m;j++)
        scanf("%d",&A[i][j]);
for (i=0;i<n;i++) qsort(A[i],m,sizeof(A[i][0]),cmp);
for (i=0;i<n;i++) hash(i);
for (i=0;i<n;i++)
    for (j=i+1;j<n;j++) if (code[i]==code[j]) used[j]=1;
for (i=0;i<n;i++) if (!used[i])
       {
       cur=1;
       used[i] = 1;
       for (j=i+1;j<n;j++) if (code[i]!=code[j] && !used[j])
           {cur++;used[j]=1;}
       if (cur > best) best = cur;
       }
printf("%d\n",best);
return 0;
}
