#include <bits/stdc++.h>
using namespace std;
int n,k,mat[2001][2001],red[2001];
bool ne_moze[1000001]={0},s[1000001]={0},s2[1000001]={0};//s-da li se pojavljivao o prethodnom redu
                                  //ne_moze-true znaci da ne moze
int main(){
    cin>>n>>k;
    int rez=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>mat[j][i];
        }
    }
    for(int i=0;i<n;i++){
        s[mat[0][i]]=true;
        s2[mat[i][0]]=true;
    }
    for(int i=1;i<n;i++){
            bool red1[1000001]={0},red2[1000001]={0};
        for(int j=0;j<n;j++){
                red1[mat[i][j]]=true;
                red2[mat[j][i]]=true;
            if(mat[i-1][j]!=mat[i][j]){

                if(s[mat[i][j]])ne_moze[mat[i][j]]=true;
                if(red1[mat[i-1][j]])ne_moze[mat[i-1][j]]=true;

            }
            if(mat[j][i-1]!=mat[j][i]){
                if(s2[mat[j][i]])ne_moze[mat[j][i]]=true;
                if(red2[mat[j][i-1]])ne_moze[mat[j][i-1]]=true;

            }
        }
        for(int j=0;j<n;j++){
                s[mat[i][j]]=true;
                s2[mat[j][i]]=true;
        }
    }
    for(int i=1;i<=k;i++){
        if(s2[i]&&!ne_moze[i]){
                rez++;
        }
    }
    cout<<rez;
    return 0;
}