from functools import lru_cache H, W = map(int, input().split()) A = [list(map(int, input().split())) for _ in range(H)] @lru_cache(maxsize=None) def dp(i, j): # (i, j)からスタートして何マス歩けるか res = 1 for dx, dy in [(1, 0), (-1, 0), (0, 1), (0, -1)]: ni, nj = i+dx, j+dy if not (0 <= ni < H and 0 <= nj < W): continue if A[i][j] < A[ni][nj]: res = max(res, dp(ni, nj)+1) return res ans = 0 for i in range(H): for j in range(W): ans = max(ans, dp(i, j)) print(ans)