#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair
#define ldb long double
#define mt make_tuple
const int N=2050;
const int K=1000050;
int a[N][N],n,k,sol,bsol;
void input()
{
	scanf("%i %i",&n,&k);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			scanf("%i",&a[i][j]);
}
void output()
{
	printf("%i\n",sol);
}
int mnx[K],mny[K],mxx[K],mxy[K],cnt[K];
void Solve()
{
	for(int i=1;i<=k;i++) mnx[i]=n+1,mny[i]=n+1,mxx[i]=0,mxy[i]=0,cnt[i]=0;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
		{
			int t=a[i][j];
			cnt[t]++;
			mnx[t]=min(mnx[t],i);
			mxx[t]=max(mxx[t],i);
			mny[t]=min(mny[t],j);
			mxy[t]=max(mxy[t],j);
		}
	sol=0;
	for(int i=1;i<=k;i++)
	{
		int sz=(mxx[i]-mnx[i]+1)*(mxy[i]-mny[i]+1);
		if(sz==cnt[i]) sol++;
	}
}
void Run()
{
	input();
	Solve();
	output();
}
void BruteForce()
{
	bsol=0;
	for(int i=1;i<=k;i++) cnt[i]=0;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cnt[a[i][j]]++;
	for(int xl=1;xl<=n;xl++)
		for(int xr=xl;xr<=n;xr++)
			for(int yl=1;yl<=n;yl++)
				for(int yr=yl;yr<=n;yr++)
				{
					bool ok=1;
					for(int i=xl;i<=xr;i++)
						for(int j=yl;j<=yr;j++)
							if(a[i][j]!=a[xl][yl]) ok=0;
					if(ok && cnt[a[xl][yl]]==(xr-xl+1)*(yr-yl+1))
						bsol++;
				}
}
void MakeTestCase()
{
	n=rand()%2000+1;
	k=rand()%1000000+1;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			a[i][j]=rand()%k+1;
}
bool Compare()
{
	return sol==bsol;
}
void Print()
{
	printf("%i %i\n",n,k);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			printf("%i%c",a[i][j],j==n?'\n':' ');
	printf("Solve: %i\n",sol);
	printf("Brute: %i\n",bsol);
}
double GetTime(){ return (ldb)clock()/CLOCKS_PER_SEC;}
double s_time,e_time,d_time;
void Start(){ s_time=GetTime();}
void Stop(){ e_time=GetTime();d_time=e_time-s_time;}
void Test()
{
	cout<<fixed<<setprecision(4);
	int work=100000;
	double max_time=0;
	bool speed_only=1;
	for(int i=1;i<=work;i++)
	{
		MakeTestCase();
		if(!speed_only) BruteForce();
		Start();
		Solve();
		Stop();
		if(!speed_only && !Compare())
		{
			Print();
			return;
		}
		max_time=max(max_time,d_time);
		cout<<i<<":OK, max time so far="<<max_time<<"\n";
	}
	cout<<":D\n";
}
int main()
{
	bool test=0;
	if(test) Test();
	else Run();
	return 0;
}