#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int r, c, ans;
int snow[110][110];
int dx[4] = {0,0,-1,1 };
int dy[4] = { -1,1,0,0};
bool legal(int x, int y) {
return(x >= 1 && x <= r && y >= 1 && y <= c);
}
void dfs(int nowx, int nowy, int len) {
ans = max(ans, len);
for (int i = 0; i < 4; i++) {
int nx = nowx + dx[i], ny = nowy + dy[i];
if ((snow[nx][ny] < snow[nowx][nowy]) && legal(nx, ny) ){
dfs(nx, ny, len + 1);
}
}
}
int main()
{
cin >> r >> c;
for (int i = 1; i <= r; i++) {
for (int j = 1; j <= c; j++)
cin >> snow[i][j];
}
for (int j = 1; j <= r; j++) {
for (int k = 1; k <= c; k++) {
dfs(j, k, 1);
}
}
cout << ans;
return 0;
}