#include <bits/stdc++.h>

using namespace std;

int n;
int k;
int cnt[1000005];
bool mark[1000005];
int basta[2005][2005];
int por[]={1,0};
int pok[]={0,1};
int brkonacnih;
int l,m;
bool vis[2005][2005];

void pronadjiZonu(int startr,int startk,int endr,int endk,int el)
{
    queue<pair<int,int>> polja;
    polja.push({startr,startk});
    
    vis[startr][startk]=true;
    
    int br=0;
    
    while(!polja.empty())
    {
        pair<int,int> temp=polja.front();
        polja.pop();
        int tempr=temp.first;
        int tempk=temp.second;
        br++;
        
        for(int i=0;i<2;i++)
        {
            int nr=tempr+por[i];
            int nk=tempk+pok[i];
            
            if(nr>=1 && nr<=endr && nk>=1 && nk<=endk && nr)
            {
                if(basta[nr][nk]==el && !vis[nr][nk])
                {
                    vis[nr][nk]=true;
                    polja.push({nr,nk});
                }
            }
        }
    }
    
    if(br==cnt[el] && br==(endr-startr+1)*(endk-startk+1)) brkonacnih++;
    
}

int main() 
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cerr.tie(0);
    
    cin >> n >> k;
    
    brkonacnih=0;
    
    for(int i=1;i<=k;i++)
    {
        mark[i]=false;
    }
    
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cin >> basta[i][j];
            cnt[basta[i][j]]++;
        }
    }
    
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(!mark[basta[i][j]])
            {
                mark[basta[i][j]]=true;
                for(m=j+1;m<=n && basta[i][m]==basta[i][j];m++);
                m--;
                for(l=i+1;l<=n && basta[l][j]==basta[i][j];l++);
                l--;
                pronadjiZonu(i,j,l,m,basta[i][j]);
            }
        }
    }
    
    cout << brkonacnih;
    
    return 0;
}