#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 307;
int f[N][N];
int st[N][N];
int a[N][N];
int n,m;
int dx[4]={-1,1,0,0};
int dy[4]={0,0,1,-1};
int dfs(int i,int j)
{
if(st[i][j]==-1)
{
st[i][j]=1;
for(int k=0;k<4;k++)
{
int x=i+dx[k],y=j+dy[k];
if(a[i][j]>a[x][y]&&x>0&&x<=n&&y>0&&y<=m)
f[i][j]=max(f[i][j],dfs(x,y)+1);
}
}
return f[i][j];
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
f[i][j]=1;
st[i][j]=-1;
scanf("%d",&a[i][j]);
}
//初始化
//状态转移方程
int ans=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
ans=max(ans,dfs(i,j));
//输出结果
cout<<ans;
return 0;
}
不加st会tle