/*
TASK:matrix
LANG:C++
*/
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int N, M;
int cnt;
int A[1000][1000], C[1000][1000];
bool B[1000][1000];
bool used[1000];
int free(int i)
{
 for(int j=0; j<N; j++)
 {
  if(B[i][j]==1) return 0;
 }
 return 1;
}
int arrs(int i, int j)
{
 for(int k=0; k<M; k++)
 {
  if(i==C[j][k]){C[j][k]=0; return 1;}
 }
 return 0;
}
int equal(int i, int j)
{
 for(int k=0; k<M; k++)
 {
  if(!arrs(C[i][k],j)) {for(int uy=0; uy<M; uy++){C[j][uy]=A[j][uy];} return 0;}
 }
 for(int uy=0; uy<M; uy++){C[i][uy]=A[i][uy];}
 return 1;
}
int main()
{
 cin>>N>>M;
 for(int i=0; i<N; i++)
 {
  for(int j=0; j<M; j++)
  {
   cin>>A[i][j];
   C[i][j] = A[i][j];
  }
 }
 for(int k=0; k<N; k++)
 {
  for(int l=0; l<N; l++)
  {
   if(k==l) continue;
   B[k][l] = equal(k, l);
  }
 }
 for(int m=0; m<N; m++)
 {
  if(free(m)) {cnt++; continue;}
  else
  {
   if(!used[m])
   {
    cnt++;
    for(int n=0; n<N; n++)
    {
     if(B[m][n]==1) {used[n]=1;}
    }
   }
  }
 }
 cout<<cnt<<endl;
 /*for(int y=0; y<N; y++)
 {
  for(int u=0; u<N; u++)
  {
   cout<<B[y][u]<<" ";
  }
  cout<<endl;
 }*/
}
