#include<bits/stdc++.h>
#define maxN 2005
#define maxK 1000050
using namespace std;

struct koord {
    int gli; int glj; int gdi; int gdj; int dli; int dlj; int ddi; int ddj; bool bio;
};

int mat[maxN][maxN];
koord niz[maxK];
int main() {
    int n, k; cin >> n >> k;

    for(int i = 0; i < n; ++i) {
        for(int j = 0; j < n; ++j) {
            cin >> mat[i][j];

            int x = mat[i][j];

            if(!niz[x].bio) {
                niz[x].bio = true;

                niz[x].gli = niz[x].gdi = niz[x].dli = niz[x].ddi = i;
                niz[x].glj = niz[x].gdj = niz[x].dlj = niz[x].ddj = j;

            }
            else {
                if(i == niz[x].gdi && j > niz[x].gdj) {
                    niz[x].gdi = i; niz[x].gdj = j;
                }
                if(i > niz[x].dli) {
                    niz[x].dli = i; niz[x].dlj = j;
                }

                niz[x].ddi = i; niz[x].ddj = j;
            }
        }
    }

    int suma = 0;
    for(int i = 1; i <= k; ++i) {
        if(niz[i].gli == niz[i].gdi && niz[i].glj == niz[i].dlj && niz[i].gdj == niz[i].ddj && niz[i].dli == niz[i].ddi && niz[i].bio) {
            bool resi = true, izadji = false;
            for(int pr = niz[i].gli; pr <= niz[i].dli; ++pr) {
                for(int dr = niz[i].glj; dr <= niz[i].gdj; ++dr) {
                    if(mat[pr][dr] != i) {
                        resi = false;
                        izadji = true;
                        break;
                    }
                }
                if(izadji)
                    break;
            }
            if(resi)
                ++suma;
        }

    }
    cout << suma;
}