#include <stdio.h>

typedef struct pravougaonik
{
	int x, y, w, h;
} Pravougaonik;

char ima[1000000] = {0};
char dobar[1000000] = {0};
int M[2000][2000];
Pravougaonik pravougaonici[1000000];

int main()
{
	int N, K, i, j, a, b;
	scanf("%d%d", &N, &K);
	
	/*for(i = 0;i<N;i++)
	{
		for(j = 0;j<N;j++)
		{
			printf("%d", ima[i*1000+j]);
			
		}
	}*/
	for(i = 0;i<N;i++)
	{
		for(j = 0;j<N;j++)
		{
			scanf("%d", &M[i][j]);
		}
	}
	
	for(i = 0;i<N;i++)
	{
		for(j = 0;j<N;j++)
		{
			if(!ima[M[i][j]-1])
			{
				int k = M[i][j];
				ima[k-1] = 1;
				int x = j;
				int y = i;
				int w = 0;
				int h = 0;
				int tw, th = 0;
				int kvadratt = 1;
				for(a = y;a<N;a++)
				{
					tw = 0;
					for(b = x;b<N;b++)
					{
						if(k==M[a][b])
						{
							tw++;
						}
						else
						{
							if(a==y)
								w = tw;
							else
								if(w!=tw)
								{
									kvadratt = 0;
									goto kraj;
								}
						}
					}
					if(w!=tw&&a!=y)
					{
						kvadratt = 0;
						goto kraj;
					}
					else
						w = tw;
					th++;
				}
				kraj:
				if(!kvadratt)
				{
					dobar[k-1] = -1;
				}
				pravougaonici[k-1].x = x;
				pravougaonici[k-1].y = y;
				pravougaonici[k-1].w = w;
				pravougaonici[k-1].h = th;
				dobar[k-1] = 1;
			}
			else
			{
				int k = M[i][j];
				if(dobar[k-1])
				{
					if(!(j>=pravougaonici[k-1].x && j<pravougaonici[k-1].x+pravougaonici[k-1].w && i>=pravougaonici[k-1].y && i<pravougaonici[k-1].y+pravougaonici[k-1].h))
					{
						dobar[k-1] = -1;
					}
				}
			}
		}
	}
	int brojac = 0;
	for(i = 0;i<1000000;i++)
	{
		if(dobar[i]==1)
		{
			brojac++;
		}
	}
	printf("%d ", brojac);
	return 0;
}