#初始化行列
n,m=map(int,input().split())
#初始化原始数据
arr0=[]
for i in range(n):
list0=input().split()
list1=[]
for i in list0:
list1.append(int(i))
arr0.append(list1)
#记录最长序列数
arr1=[[1 for i in range(m)] for j in range(n)]
d=[[0,-1],[0,1],[-1,0],[1,0]]
#深搜
def dfs(i,j):
if arr1[i][j]>1:
return arr1[i][j]
for k in d:
x=i+k[0]
y=j+k[1]
if x>=0 and x<n and y>=0 and y<m and arr0[i][j]>arr0[x][y]:
arr1[i][j]=max(dfs(x,y)+1,arr1[i][j])
return arr1[i][j]#核心
for i in range(n):
for j in range(m):
dfs(i,j)
max0=1
for i in arr1:
max0=max(max0,max(i))
print(max0)