#include<iostream>

using namespace std;

main(){
	unsigned int N;
	unsigned long K,i,j,k,a,b,c,d,e,dobBr=0,brRP,provSort,sum;
	long tFirst=-1,tLast=-1;
	bool status;
	cin>>N>>K;
	unsigned long M[N][N],nSorta[K],izbor[N];
	for(i=0;i<N;i++){
		for(j=0;j<N;j++){
			cin>>M[i][j];
		}
	}
	for(i=0;i<K;i++){
		nSorta[i]=0;
	}
	for(i=0;i<K;i++){
		for(k=0;k<N;k++){
			for(j=0;j<N;j++){
				if(i+1==M[k][j]){
					nSorta[i]++;//kolicina odredjene sorte
				}
			}
		}
	}
	for(i=0;i<K;i++){//prolazimo kroz sorte
		brRP=0;
		c=0;
		provSort=1;
		for(j=0;j<N;j++){//prolazimo redove
			for(k=0;k<N;k++){//prolazimo kolone
				if(M[j][k]==i+1){
					izbor[c]=k;
					c++;
				}
			}
		}
		tFirst=izbor[0];
		tLast=izbor[0];
		for(d=1;d<nSorta[i];d++){
			if(izbor[d]<tFirst){
				tFirst=izbor[d];
			}
			if(izbor[d]>tLast){
				tLast=izbor[d];
			}
		}
		
		sum=0;
		bool proba=false;
		bool proba1=true;
		for(a=0;a<N;a++){
			for(b=tFirst;b<1+tLast;b++){
				if(M[a][b]!=i+1&&proba1==false){
					sum=0;
				}
				if(M[a][b]==i+1&&proba1==false){
					sum++;
				}
				if(M[a][b]==i+1&&proba1){
					sum++;
					proba1=false;
				}
			}
			if(sum==nSorta[i]&&sum!=0){
				dobBr++;
				break;
			}
		}
	
		for(e=0;e<N;e++){
			izbor[e]=-1;
		}
		tLast=-1;
		tFirst=-1;
	}
	cout<<dobBr;
}