/*
TASK:matrix
LANG:c
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int a[1500][1500];
int sort_function(const void *a,const void *b)
{
return( strcmp((char *)a,(char *)b) );
}

int main()
{
int i,j,M,N,k,p;
int ed[1500],max=1;
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((int *)a[i], M, sizeof(a[0][0]), sort_function);
for(i=0;i<N;i++)
                ed[i]=i;
for(i=0;i<N-1;i++)
                  for(j=i+1;j<N;j++)
                                    {for(k=0;k<M;k++)
                                                     if(a[i][k]!=a[j][k])break;
                                                                               if(k==M)ed[j]=ed[i];
                                                                                                   }
for(i=2;i<=N;i++)
                 for(j=0;j<=N-i;j++)
                                    {
                                     for(k=j;k<j+i-1;k++)
                                     {
                                          for(p=k+1;p<j+i;p++)
                                                              if(ed[k]==ed[p])break;
                                          if(p!=j+i)break;
                                     }
                                    if(k==j+i-1)if(i>max)max=i;
                                    }
printf("%d\n",max);
return 0;
}
