#include <iostream>
#include <queue>

using namespace std;

int Kn[1000007]={0};
int Mat[2007][2007]={0};
int Mask[2007][2007]={0};
int Seg[4000007]={0};
int n=0,k=0,Ps=0,Fs=0;

void Bfs(int sx,int sy,int m,int &minx,int &miny,int &maxx,int &maxy,int &mcount)
{
    queue<pair<int,int>> Q;
    Q.push(make_pair(sx,sy));
    while(!Q.empty())
    {
        int x=Q.front().first,y=Q.front().second;
        Q.pop();
        if(x>=0 && x<n && y>=0 && y<n)
        {
            if(Mat[x][y]==m && Mask[x][y]==0)
            {
                Mask[x][y]=1;
                mcount++;
                if(x>maxx){maxx=x;}
                if(x<minx){minx=x;}
                if(y>maxy){maxy=y;}
                if(y<miny){miny=y;}
                Q.push(make_pair(x+1,y));
                Q.push(make_pair(x-1,y));
                Q.push(make_pair(x,y+1));
                Q.push(make_pair(x,y-1));
            }
        }
    }
}

void RunSegment(int x,int y)
{
    int minx=x,miny=y,maxx=x,maxy=y,mcount=0,m=Mat[x][y];
    Kn[m]++;
    Bfs(x,y,m,minx,miny,maxx,maxy,mcount);
    if((maxx-minx+1)*(maxy-miny+1) == mcount)
    {
        Seg[Ps]=m;
        Ps++;
    }
}

void RunSegments()
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(Mask[i][j]==0){RunSegment(i,j);}
        }
    }
    for(int i=0;i<Ps;i++)
    {
        if(Kn[Seg[i]]==1){Fs++;}
    }
    cout<<Fs;
}

int main()
{
    cin>>n>>k;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cin>>Mat[i][j];
        }
    }
    RunSegments();
    return 0;
}