#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    int N,K,bri=0,broj=0,sx=0,sy=0,kx=0;
    ifstream input;
    ofstream output;
    input.open("input.txt");
    output.open("output.txt");
    cin>>N>>K;
    output<<N<<K<<endl;
    int n[N][N];
    bool lev=true;
    bool dole=true;
    for(int x=0;x<N;x++)
        for(int y=0;y<N;y++)
        {
            cin>>n[x][y];
        }
   /* for(int x=0;x<N;x++){
        for(int y=0;y<N;y++)
        {
            cout<<n[x][y];
            output<<n[x][y];

        }
        cout << endl;}*/
    int brg=n[0][0];
    start:
        kx=0;
        bri=0;
        lev=true;
        dole=true;
    while(lev)
    {
        if(sx+1==N)break;
        else if(n[sx+1][sy]!=brg)break;
        else n[sx][sy]=0;
        sx++;
        kx++;
    }
    while(dole)
    {
        if(sy+1==N)break;
        for(int i=0;i<=kx;i++)
        {
            if(n[sx-kx+i][sy+1]!=brg)
            {
                dole=false;
                sy--;
                break;
            }
            else n[sx-kx+i][sy+1]=0;
        }
        if(n[sx][sy+1]!=brg)
            {
                break;
            }
            else n[sx][sy]=0;
        sy++;
    }
    for(int x=0;x<N;x++)
        {
            for(int y=0;y<N;y++)
                {
                    if(n[x][y]!=0)bri++;
                    if(n[x][y]==brg)
                    {
                        if(sy+1==N)goto kraj;
                        if(sx+1==N){sy++;sx=0;}
                        if(sx+1!=N)sx++;
                        brg=n[sx][sy];
                        goto start;
                    }
                }
        }
    broj++;
    if(!bri)goto kraj;
    goto start;
    kraj:
    input.close();
    output.close();
    cout<<broj<<endl;
    return 0;
}