#include <iostream>
#include <bits/stdc++.h>

using namespace std;

string A[1000*1000+5];
int M[2005][2005];
int br=0;
void Resi(int i,int j,int poc,int M[][2005],int N,int element){
    if(j>N-1){
        cout<<br;
    }
    else{
        if(i+1!=N){
        if(M[i+1][j]!=element){
            if(A[element]=="0"){
                A[element]=to_string(poc)+","+to_string(i)+","+to_string(j);
                br++;
                Resi(i+1,j,i+1,M,N,M[i+1][j]);

            }
            else if(A[element]!="-1"){
                string s=to_string(poc)+","+to_string(i)+","+to_string(j-1);
                if(A[element].compare(s)==0){
                    A[element]=to_string(poc)+","+to_string(i)+","+to_string(j);
                }
                else{
                    A[element]="-1";
                    br--;
                }
                Resi(i+1,j,i+1,M,N,M[i+1][j]);
            }
            else{
                Resi(i+1,j,i+1,M,N,M[i+1][j]);
            }
        }
        else{
            Resi(i+1,j,poc,M,N,element);
        }
        }
        else{
            if(A[element]=="0"){
                A[element]=to_string(poc)+","+to_string(i)+","+to_string(j);
                br++;
                Resi(0,j+1,0,M,N,M[0][j+1]);

            }
            else if(A[element]!="-1"){
                string s=to_string(poc)+","+to_string(i)+","+to_string(j-1);
                if(A[element].compare(s)==0){
                    A[element]=to_string(poc)+","+to_string(i)+","+to_string(j);
                }
                else{
                    A[element]="-1";
                    br--;
                }
                Resi(0,j+1,0,M,N,M[0][j+1]);
            }
            else{
                Resi(0,j+1,0,M,N,M[0][j+1]);
            }
        }
    }
}

int main()
{
    int N,K;
    cin>>N>>K;

    for(int i=0;i<=K;i++)
        A[i]="0";

    for(int i=0;i<N;i++){
        for(int j=0;j<N;j++){
            cin>>M[i][j];
        }
    }

    Resi(0,0,0,M,N,M[0][0]);
    //cout<<M[0][2];
    return 0;
}