#include <iostream>
#include <queue>
#include <stdio.h>
#include <string>
#include <cmath>
#include <algorithm>
int arr[101][101];
int d[101][101];
int visited[101][101];
int dx[4] = { 1,0,-1,0 };
int dy[4] = { 0,1,0,-1 };
int main() {
int n, m;
scanf("%d %d", &n, &m);
std::queue<std::pair<int, int>> q;
for (int i = 0;i < n;i++) {
for (int j = 0;j < m;j++) {
scanf("%1d", &arr[i][j]);
}
}
q.push(std::make_pair(0, 0));
while (!q.empty()) {
int y = q.front().first;
int x = q.front().second;
q.pop();
visited[y][x] = 1;
if (y == n - 1 && x == m - 1) {
break;
}
for (int i = 0;i < 4;i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 0 && nx < m && ny >= 0 && ny < n) {
if (arr[ny][nx] == 1 && d[ny][nx]==0 && visited[ny][nx] == 0) {
q.push(std::make_pair(ny, nx));
visited[ny][nx] = 1;
d[ny][nx] = d[y][x] + 1;
}
}
}
}
printf("%d", d[n - 1][m - 1] + 1);
}