#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
const int N=1005;
const int fx[4]={0,0,1,-1};
const int fy[4]={1,-1,0,0};
int f[N][N],a[N][N];
bool vis[N][N];
void dfs(int x,int y){
for(int i=0;i<4;++i){
int x1=x+fx[i],y1=y+fy[i];
if(x1<=0||y1<=0||x1>n||y1>m||a[x][y]<a[x1][y1])continue;
if(vis[x1][y1]){
vis[x][y]=true;
f[x][y]=max(f[x][y],f[x1][y1]+a[x][y]-a[x1][y1]);
}else{
vis[x][y]=true;
dfs(x1,y1);
f[x][y]=f[x1][y1]+a[x][y]-a[x1][y1];
}
}
if(vis[x][y])return;
else{
f[x][y]=0;
vis[x][y]=true;
return;
}
}
int main(){
int i,j,res=0;
cin>>n>>m;
for(i=1;i<=n;++i){
for(j=1;j<=m;++j){
cin>>a[i][j];
}
}
for(i=1;i<=n;++i){
for(j=1;j<=m;++j){
if(!vis[i][j])dfs(i,j);
}
}
for(i=1;i<=n;++i){
for(j=1;j<=m;++j)res=max(res,f[i][j]);
}
cout<<res+1;
return 0;
}