
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
const int MAX = 101;
const int dx[] = {-1, 1, 0, 0};
const int dy[] = {0, 0, -1, 1};
queue<pair<int, int>> q;
int mat[MAX][MAX];
int visited[MAX][MAX];
int n, m;
int cnt = 1;
int main() {
int i, j;
scanf("%d %d", &n, &m);
for (i=0; i<n; i++) {
for (j=0; j<m; j++) {
scanf("%1d", &mat[i][j]);
visited[i][j] = 0;
}
}
visited[0][0] = 1;
q.push({0,0});
while(1) {
int x = q.front().first;
int y = q.front().second;
q.pop();
if (x == n-1 && y == m-1) {
printf("%d", visited[n-1][m-1]);
return 0;
}
for (i=0; i<4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx>=0 && nx<n && ny>=0 && ny<m) {
if (visited[nx][ny] == 0 && mat[nx][ny] == 1) {
q.push({nx, ny});
visited[nx][ny] = visited[x][y] + 1;
}
}
}
}
return 0;
}