#include <iostream>
using namespace std;
int m[2000][2000];
int pom [2000][2000];
int koriscen[1000000];
bool nadjenPzak[1000000];
int i,j,n,k,br=0,x1,x2,y1,y2;
bool p;
bool pravougaonik(int i1,int j1,int i2, int j2,int x)
{
    p=true;
    for(i=i1;i<=i2 && p;i++)
    {
        for(j=j1;j<=j2 && p;j++)
            if(m[i][j]!=x)
            p=false;
    }

    return p;
}

void granice2(int p,int q,int &i1,int &j1,int &i2, int &j2,int x)
{
                if(p<i1)
                  i1=p;
                if(p>i2)
                    i2=p;
                if(q<j1)
                    j1=q;
                if(q>j2)
                    j2=q;
            pom[p][q] = 1;
            if(p>1)
            {
                if (m[p - 1][q] == x && pom[p-1][q]==0)
                    granice2(p - 1, q, i1,j1,i2,j2,x);
            }
            if(q>1)
            {
                if (m[p][ q - 1] == x && pom[p][q-1]==0)
                    granice2(p, q - 1, i1,j1,i2,j2,x);
            }
            if(p<n-1)
            {
                if (m[p + 1][q] == x && pom[p+1][q]==0)
                    granice2(p + 1, q, i1,j1,i2,j2,x);
            }
            if(q<n-1)
            {
                if (m[p][q + 1] == x && pom[p][q+1]==0)
                    granice2(p, q + 1, i1,j1,i2,j2,x);
            }

        }
int main()
{
    ios_base::sync_with_stdio(false);
    cout.tie(NULL);
    cin.tie(NULL);
    cin>>n;
    cin>>k;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            cin>>m[i][j];
    }
    for(int a1=0;a1<n;a1++)
    {
        for(int a2=0;a2<n;a2++)
        {
            if(pom[a1][a2]==0)
            {
            x1=n,x2=0,y1=n,y2=0;
            granice2(a1,a2,x1,y1,x2,y2,m[a1][a2]);
            if(pravougaonik(x1,y1,x2,y2,m[a1][a2]))
               nadjenPzak[m[a1][a2]-1]=true;
            koriscen[m[a1][a2]-1]++;
            }
        }
    }
    for(i=0;i<k;i++)
    {
        if(nadjenPzak[i]==true && koriscen[i]==1)
            br++;
    }
    cout<<br;
    return 0;
}