逆推,当某一个位置少于1是,要取1
终点:dp[-1][-1]=max(1-nums[-1][-1],1)
最后1行: dp[m-1][i-1]=max(dp[m-1][i]-nums[m-1][i-1],1)
最后1列:dp[i-1][n-1]=max(dp[i][n-1]-nums[i-1][n-1],0)
其它位置:dp[i-1][j-1]=max(min(dp[i-1][j]-nums[i-1][j-1],dp[i][j-1]-nums[i-1][j-1]),1)      
结果在dp[0][0]



m,n=map(int,input().split())
nums=[]
dp=[[0 for i in range(n)] for j in range(m)]

for i in range(m):
    nums.append(list(map(int,input().split())))

dp[-1][-1]=max(1-nums[-1][-1],1)
for i in range(n-1,0,-1):
    dp[m-1][i-1]=max(dp[m-1][i]-nums[m-1][i-1],1)
for i in range(m-1,0,-1):
    dp[i-1][n-1]=max(dp[i][n-1]-nums[i-1][n-1],0)
for i in range(m-1,0,-1):
    for j in range(n-1,0,-1):
        dp[i-1][j-1]=max(min(dp[i-1][j]-nums[i-1][j-1],dp[i][j-1]-nums[i-1][j-1]),1)      
print(dp[0][0])