/*
TASK:matrix
LANG:C++
*/
#include<iostream>
int n,m;
int a[1000][1000];
int p[1000][1000];
int br_max;
int end[1000];
int x[1000];
void read()
{
	std::cin>>n>>m;
	for(int i=0;i<=n-1;i++)
		for(int j=0;j<=m-1;j++)
			std::cin>>a[i][j];
}
int checker(int l,int d)
{
	int used[1000];
	for(int i=0;i<=999;i++)
		used[i]=0;
	for(int q=0;q<=m-1;q++)
		used[a[l][q]-1]=1;
	for(int t=0;t<=m-1;t++)
		if(used[a[d][t]-1]==0)
			return 0;
	return 1;
}
void checking()
{
	for(int i=0;i<=n-1;i++)//za vseki red i
		for(int j=0;j<=n-1;j++)//i za vseki drug red j
			if(checker(i,j)==1 && i!=j)//proveriavame dali 'i' i 'j' sa podobni 
			{
				p[i][end[i]]=j;
				end[i]++;
			}
}
void search()
{
	for(int i=0;i<=n-1;i++)//za vseki red 'i'
		if(x[i]==0)//proveriavame dali ne e iskluchen
		{
			for(int k=0;k<=end[i]-1;k++)//iskluchvame vsicki koito sa podobni na red 'i'
				x[p[i][k]]=1;
		}
	for(int l=0;l<=n-1;l++)
		if(x[l]==0)
			br_max++;
}
int main()
{
	read();
	checking();
	search();
/*	for(int i=0;i<=n-1;i++)
	{
		for(int j=0;j<=end[i]-1;j++)
			std::cout<<p[i][j]<<" ";
		std::cout<<"\n";
	}
	std::cout<<"\n";*/
	std::cout<<br_max<<"\n";
	return 0;
}