import sys
input=sys.stdin.readline
from collections import deque
n,m=map(int, input().split())
arr=[]
dx, dy= [-1, 1, 0, 0], [0, 0, -1, 1]
for i in range(n):
arr.append(list(map(int, input().rstrip())))
def bfs(i, j):
queue=deque()
queue.append((i, j))
while queue:
x,y = queue.popleft()
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if nx<0 or nx>=n or ny<0 or ny>=m:
continue
if arr[nx][ny]==1:
arr[nx][ny]=arr[x][y]+1
queue.append((nx, ny))
return arr[n-1][m-1]
print(bfs(0,0))
N,M=map(int,input().split())
B=[list(map(int,list(input()))) for _ in range(N)]
dy,dx=[0,1,0,-1],[1,0,-1,0]
V=[0]*(N*M)
V[0]=1
q=[(0,0,V[0])]
while q:
y,x,d=q.pop(0)
if y==N and x==M:
break
for i in range(4):
ny=y+dy[i]
nx=x+dx[i]
if 0<=ny<N and 0<=nx<M and V[ny*M+nx]==0:
if B[ny][nx]==1:
q.append((ny,nx,d+1))
V[ny*M+nx]=d+1
print(V[N*M-1])
import sys
from collections import deque
input=sys.stdin.readline
n,m=map(int,input().split())
graph=[list(map(int,input().strip())) for _ in range(n)]
dx=[1,0,-1,0]
dy=[0,1,0,-1]
def bfs(x,y):
q=deque()
q.append((x,y))
while q:
i,j=q.popleft()
for k in range(4):
ni=i+dx[k]
nj=j+dy[k]
if (0<= ni<n) and (0<=nj<m):
if(graph[ni][nj]==1):
q.append((ni,nj))
graph[ni][nj]=graph[i][j]+1
return graph[-1][-1]
print(bfs(0,0))
dfs(깊이우선) : 어떤 경우의 수
bfs(너비우선) : 최단거리, 또는 최소횟수