#include <bits/stdc++.h>

using namespace std;

int m[2000][2000];

struct polje
{
    int x;
    int y;
    int v;
};

polje polja[4000000];

bool sortiraj(polje a, polje b)
{
    if(a.v > b.v) return false;
    if(a.v < b.v) return true;
    if(a.x > b.x) return false;
    if(a.x < b.x) return true;
    if(a.y > b.y) return false;
    if(a.y < b.y) return true;
    return true;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n, k;
    int res = 0;
    scanf("%d%d", &n, &k);
    int br = 0;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            scanf("%d", &m[i][j]);
            polja[br].x = i;
            polja[br].y = j;
            polja[br].v = m[i][j];
            br++;
        }
    }

    int tr = 0;
    int poc = 0;
    int maxiX = INT_MIN;
    int miniX = INT_MAX;
    int maxiY = INT_MIN;
    int miniY = INT_MAX;

    sort(polja, polja + br, sortiraj);
    for(int i=0;i<br;i++)
    {
        if(polja[i].v != tr)
        {
            //tr = polja[i].v; dole je
            if( (maxiX-miniX+1) * (maxiY-miniY+1) == i - poc)
            {
                res++;
                //printf("%d", tr);

            }
            tr = polja[i].v;

            poc = i;
            maxiX = polja[i].x;
            miniX = polja[i].x;
            maxiY = polja[i].y;
            miniY = polja[i].y;
        }
        else
        {
            if(polja[i].x > maxiX) maxiX = polja[i].x;
            if(polja[i].x < miniX) miniX = polja[i].x;
            if(polja[i].y > maxiY) maxiY = polja[i].y;
            if(polja[i].y < miniY) miniY = polja[i].y;
        }
    }
    if( (maxiX-miniX+1) * (maxiY-miniY+1) == br - poc)
    {
        res++;
        //printf("%d", tr);

    }
    printf("%d", res);


    return 0;
}