#include<bits/stdc++.h>
using namespace std;
int fx[] = {-1,0,1,0,-1,-1,1,1}; //i方向 
int fy[] = {0,1,0,-1,-1,1,1,-1}; //j方向 
int R,C,a[51][51]; 
int main(){
    cin>>R>>C;
    int i,j,k,t,oi,oj,mx=INT_MIN;
    for(i=1;i<=R;i++) 
        for(j=1;j<=C;j++) 
            cin>>a[i][j];
    for(i=1;i<=R;i++) 
    {
        for(j=1;j<=C;j++)
        {   //0的时候 跳过 
            if(a[i][j]==0) continue;
            t = 0;
            //方向数组 
            for(k=0;k<8;k++)
            {
                oi = i + fx[k];
                oj = j + fy[k];
                if(oi>=1&&oi<=R&&oj>=1&&oj<=C&&a[oi][oj]==a[i][j])
                {
                    t++;
                }
            }
            if(t>0){
                mx = max(mx,a[i][j]);
            }
        } 
    }
    cout<<mx; 
    return 0;
}
/**************************************************************
	Problem: 1917
	User: admin
	Language: C++
	Result: Accepted
	Time:8 ms
	Memory:2084 kb
****************************************************************/