#include<iostream>
using namespace std;
int ired(int i,int j,int n,int **matrica)
{
    int pi=i;
    int f=1;
    for(int k=i+1;k<n;k++)
    {
        if(matrica[k][j]==matrica[pi][j]) f++;
    }
    return f;
}
bool pravougaonik(int i1,int j1,int i2,int j2,int **matrica,int n,int x)
{
    if(i2>n || j2>n) return false;
    for(int j=j1;j<=j2;j++)
    {
        for(int i=i1;i<=i2;i++)
        {
            if(matrica[i][j]!=x) return false;
        }

    }
    return true;


}
int main()
{
    int n,k,broj=0;
    int sirina;
    cin>>n>>k;
    int a[k];
    for(int i=0;i<k;i++)
    {
        a[i]=0;
    }
    int matrica[n][n];
    int *m[n];
    for(int i=0;i<n;i++) m[i]=matrica[i];
    for(int j=0;j<n;j++)
    {
        for(int i=0;i<n;i++)
        {
            cin>>matrica[i][j];
            a[matrica[i][j]-1]++;
        }
    }
   for(int i=0;i<n;i++) m[i]=matrica[i];
    for(int j=0;j<n;j++)
    {
        for(int i=0;i<n;i++)
        {
            if(a[matrica[i][j]-1]>0)
            {
                sirina=ired(i,j,n,m);
                if(a[matrica[i][j]-1]%sirina!=0)
                {
                    a[matrica[i][j]-1]=-1;
                    continue;
                }
                if(pravougaonik(i,j,i+sirina-1,j+a[matrica[i][j]-1]/sirina-1,m,n,matrica[i][j]))
                   {
                       broj++;
                   }
                   a[matrica[i][j]-1]=-1;
            }
        }
}
cout<<broj<<endl;
}