#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define pii pair<int,int>
#define sz(x) (int)(x).size()
#define all(x) x.begin(), x.end()
#define forn(a,b,c) for(int a=b;a<=c;a++)
#define ford(a,b,c) for(int a=b;a>=c;a--)
const int N=2e3+5;
const int K=1e6+5;
int n,k,mat[N][N],ans,mnx[K],mxx[K],mny[K],mxy[K];pii first[K],last[K];bool cant[K];
bool check(int x){
    if(mny[x]<first[x].s||mxy[x]>last[x].s){
       // printf("da za x=%d\n",x);
        return 0;
    }
    forn(i,first[x].f,last[x].f){
        forn(j,first[x].s,last[x].s){
            if(mat[i][j]!=x){
                return 0;
            }
        }
    }
    return 1;
}
int main()
{
    scanf("%d%d",&n,&k);
    forn(i,1,k){mny[i]=N;}
    forn(i,1,n){
        forn(j,1,n){
            scanf("%d",&mat[i][j]);
            if(first[mat[i][j]].f==0&&first[mat[i][j]].s==0){
                first[mat[i][j]]=mp(i,j);
            }
            //printf("i:%d j:%d mat[i][j]:%d first[mat[i][j]].s:%d\n",i,j,mat[i][j],first[mat[i][j]].s);
            mny[mat[i][j]]=min(j,mny[mat[i][j]]);
            mxy[mat[i][j]]=max(j,mxy[mat[i][j]]);
            last[mat[i][j]]=mp(i,j);
        }
    }
    forn(i,1,k){
        //printf("i:%d fi:%d %d la:%d %d\n",i,first[i].f,first[i].s,last[i].f,last[i].s);
        //if(cant[i]){printf("cant[%d]\n",i);}
        if(check(i)){
            //printf("vazi za i:%d\n",i);
            ans++;
        }
    }
    printf("%d\n",ans);
    return 0;
}