let p = readLine()!.split(separator: " ").map{Int(String($0))!}
let (m,n) = (p[0],p[1])
let d = [(-1,0),(1,0),(0,-1),(0,1)]
var arr = [[Int]]()
var dist = Array(repeating: Array(repeating: Int.max, count: m), count: n)
for _ in 0..<n {
arr.append(readLine()!.map{Int(String($0))!})
}
func bfs() {
var q = [(0,0)]
var index = 0
dist[0][0] = 0
while index < q.count {
let node = q[index]
index += 1
for (x,y) in d {
let nx = node.0+x
let ny = node.1+y
if 0<=nx, 0<=ny, nx<n, ny<m {
switch arr[nx][ny] {
case 0 :
if dist[nx][ny] > dist[node.0][node.1] {
dist[nx][ny] = dist[node.0][node.1]
q.append((nx,ny))
}
default:
if dist[nx][ny] > dist[node.0][node.1] + 1 {
dist[nx][ny] = dist[node.0][node.1] + 1
q.append((nx,ny))
}
}
}
}
}
print(dist[n-1][m-1])
}
bfs()