package main

import (
	"fmt"
)

func main() {
	n, m := 0, 0
	for {
		num, _ := fmt.Scan(&n, &m)
		if num == 0 {
			break
		} else {
			arr := make([][]int, n)
			for i := 0; i < n; i++ {
				arr[i] = make([]int, m)
				for j := 0; j < m; j++ {
					fmt.Scan(&arr[i][j])
				}
			}
			fmt.Println(process2(arr, n, m))
		}
	}
}

func process2(arr [][]int, n, m int) int {
	dp := make([][]int, n)
	for i := 0; i < len(dp); i++ {
		dp[i] = make([]int, m)
	}

	for i := n - 1; i >= 0; i-- {
		for j := m - 1; j >= 0; j-- {
			if i == n-1 && j == m-1 {
			    // 右下脚位置处,dp[i][j] + arr[i][j] >= 1
				dp[i][j] = 1 - arr[i][j]
			} else if i == n-1 {
			    // 最后一行位置处,
			    // 血量需要满足大于1,大于需要的血量dp[i][j+1]
				minn := max(1, dp[i][j+1])
				dp[i][j] = minn - arr[i][j]
			} else if j == m-1 {
			    // 最后一列位置处,
			    // 血量需要满足大于1,大于需要的血量dp[i+1][j]
				minn := max(1, dp[i+1][j])
				dp[i][j] = minn - arr[i][j]
			} else {
			    // 其他位置处,
			    // 血量需要满足大于1,大于最小值(dp[i+1][j],dp[i][j+1]) 
				minn := max(1, min(dp[i][j+1], dp[i+1][j]))
				dp[i][j] = minn - arr[i][j]
			}
			// 每个[i,j]位置处均不能小于1
			if dp[i][j] < 1 {
				dp[i][j] = 1
			}
		}
	}

	return dp[0][0]
}
func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}
func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}