ํญ์ (0, 0)์์ ์์ํด์ (M-1, N-1)๋ก ์ด๋ํ๊ฒ ๋๋ค. ์ด๋ํ ๋ ๋์ค์ ๋ฐ์ด๋๊ฑฐ๋ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ๋ชจ๋ ๊ธธ์ ์ฐ๊ฒฐ๋์ด ์๋ค. A์์ A์ ์ธ์ ํ ๊ณณ์ผ๋ก ๊ฐ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ ์ผ๋จ A๊น์ง ๊ฐ๋๋ฐ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ์ ์์ ์ถ๊ฐ์ ์ผ๋ก ๋ํด์ง๋ ๊ฒ์ด๋ค. ํน์ ์์น์ ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ์ ๋์ ํด์ ๊ตฌํ๋ ๊ฒ, ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค
2์ฐจ์ ๋ฐฐ์ด์์ dp๋ฅผ ๊ตฌํํ ๋ ์ด๋ค ๋ฐฉํฅ์ผ๋ก ์งํํ ๊ฒ์ด๋๊ฐ ๋ฌธ์ ๊ฐ ๋๋๋ฐ, ์ด ๋ฌธ์ ์์๋ ๋ฐ๋์ ์์ ์ซ์๊ฐ ์๋ ๋ฐฉํฅ์ผ๋ก๋ง ์ด๋ํ ์ ์๋ค๋ ํํธ๊ฐ ์๋ค. ํญ์ ์ผ์ชฝ ์์์ ์์ํ๊ฒ ๋๊ณ , ์ด๋ค ๊ฐ์ ์ง๋๊ฐ๋ ๊ทธ ๊ฐ๋ณด๋ค ๋ ํฐ ๊ฐ์ผ๋ก๋ ์ด๋ํ ์ ์๋ค. ์ด๋ํ ๋๋ง๋ค ๋ฐ๋์ ๋ ์์ ๊ฐ์ผ๋ก ์ด๋ํด์ผ ํ๋ค. ์ํ์ข์ฐ๋ก ๋ชจ๋ ์ด๋ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ ์์ ํ์์ ๋ ํฐ ํ์ผ๋ก ์ด๋ํ๊ฑฐ๋ ํ๋ ์์น ๋ฐฉ์์ผ๋ก๋ ์ด๋ ต๋ค. ๋ง์ฝ ๊ทธ๋ ๊ฒ ๋๋ฉด ์์ชฝ ์นธ์ ๋ ์์ ๊ฐ์ด ์์๋ ๊ฒฝ์ฐ๋ ์ ๋๋ก ๋ dp๊ฐ ์ด๋ฃจ์ด์ง๊ธฐ ์ด๋ ต๋ค. dp๋ ์ด์ ์ ๊ตฌํ ๊ฐ์ด ํ์คํ๋ค๊ณ ๊ฐ์ ํ๊ณ ๊ทธ ๊ฐ์ ๊ฐ๊ณ ๋ค์ ๊ฐ์ผ๋ก ๋์ด๊ฐ๊ฒ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ๋ฌด์กฐ๊ฑด ์์ ๊ฐ์ผ๋ก๋ง ์ด๋ํด์ผ ํ๋ค๋ ์กฐ๊ฑด์ด ๋ถ๋๋ค๋ฉด, ํญ์ ๋ชจ๋ ์ด๋์ ๋ ํฐ ๊ฐ์์ ๋ ์์ ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง๊ฒ ๋๊ณ , ๊ณ์ํด์ ๋ ํฐ ๊ฐ์ ๊ฐ์ง๋ ์นธ๋ค์ ์ฐ์ ์์๋ฅผ ์ฃผ๋ฉด์ ์ด๋์ ์ํค๋ฉด ๊ฐ ์นธ์ ๋ํ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ๋๋ก ๊ตฌํ ์ ์๋ค. ๋ ํฐ ์ซ์๋ฅผ ๊ฐ์ง๋ ์นธ๋ถํฐ ์ฐพ๊ฒ ๋๋ฉด ์ด๋ฏธ ๋ฐฉ๋ฌธํ๋ ์นธ์ ์ฌ๋ฐฉ๋ฌธํ์ง ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.(ํญ์ ๋ ์์ ๊ฐ์ผ๋ก๋ง ๊ฐ๋๊น)
๋ฐฐ์ด์ ํฌ๊ธฐ๋ 500x500์ผ๋ก ์ด 25๋ง์นธ์ด๊ณ ๋งค๋ฒ ์ต๋๊ฐ์ ์ฐพ๋ ๋ฐฉ์์ ์ํํ๊ฒ ๋๋ฉด ์๊ฐ์ด ๊ฝค ์ค๋ ๊ฑธ๋ฆด ๊ฒ ๊ฐ์์ ์ต๋ํ์ ์ฌ์ฉํ ์ฐ์ ์์ํ๋ฅผ ์จ์ ๊ตฌํํ๋ค.
# ๋ด๋ฆฌ๋ง ๊ธธ
from heapq import heappop, heappush
m, n = map(int, input().split())
MAP = [list(map(int, input().split())) for _ in range(m)]
dp = [[0]*n for _ in range(m)]
start = MAP[0][0]
dp[0][0] = 1
pq = [(-start, 0, 0)]
dx, dy = (-1, 0, 1, 0), (0, 1, 0, -1)
while pq:
num, x, y = heappop(pq)
if MAP[x][y] == start+1:
continue
for i in range(4):
nx, ny = x+dx[i], y+dy[i]
if not(-1<nx<m and -1<ny<n) or MAP[nx][ny] >= -num:
continue
dp[nx][ny] += dp[x][y]
heappush(pq, ((-MAP[nx][ny], nx, ny)))
MAP[x][y] = start+1
print(dp[m-1][n-1])