#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ul unsigned long long
ll mod = 1e9+7;
const int N = 1e3+5;
int MOD = 998244353;
int bit[200000];
int n, m;
//vector<int> adj[N];
char a[N][N];
int d[N][N];
bool visit[N][N];
int sX[] = {0, 0, 1, -1};
int sY[] = {1, -1, 0, 0};
int dem = 1;
void nhap(){
cin >> n >> m;
for(int i= 1 ; i <= n ; i++){
for(int j= 1; j <= m ; j++){
cin >> a[i][j];
}
}
}
void bfs(int sx, int sy) {
queue < pair <int, int> > q;
q.push({sx, sy});
visit[sx][sy] = true;
while (!q.empty()) {
int x = q.front().first;
int y = q.front().second;
q.pop();
for (int i = 0; i < 4; ++i) {
int u = x + sX[i];
int v = y + sY[i];
if (u > n || u < 1) continue;
if (v > m || v < 1) continue;
if (a[u][v] == '0' && !visit[u][v]) {
visit[u][v] = true;
q.push({u, v});
d[u][v] = d[x][y] + 1;
}
}
}
}
int main() {
//freopen("CSBN.INP", "r", stdin);
//freopen("CSBN.OUT", "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
nhap();
if(a[1][1] == '1'){
cout << -1;
return 0;
}
bfs(1,1);
if(d[n][m]== 0) cout << -1;
else cout << d[n][m];
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIHVsIHVuc2lnbmVkIGxvbmcgbG9uZwoKbGwgbW9kID0gMWU5Kzc7CmNvbnN0IGludCBOID0gMWUzKzU7CmludCBNT0QgPSA5OTgyNDQzNTM7CmludCBiaXRbMjAwMDAwXTsKaW50IG4sIG07Ci8vdmVjdG9yPGludD4gYWRqW05dOwpjaGFyIGFbTl1bTl07CmludCBkW05dW05dOwpib29sIHZpc2l0W05dW05dOwppbnQgc1hbXSA9IHswLCAwLCAxLCAtMX07CmludCBzWVtdID0gezEsIC0xLCAwLCAwfTsKaW50IGRlbSA9IDE7CnZvaWQgbmhhcCgpewoJY2luID4+IG4gPj4gbTsKCWZvcihpbnQgaT0gMSA7IGkgPD0gbiA7ICBpKyspewoJCWZvcihpbnQgaj0gMTsgaiA8PSBtIDsgaisrKXsKCQkJY2luID4+IGFbaV1bal07CgkJfQoJfQp9CnZvaWQgYmZzKGludCBzeCwgaW50IHN5KSB7IAogICAgcXVldWUgPCBwYWlyIDxpbnQsIGludD4gPiBxOwogICAgcS5wdXNoKHtzeCwgc3l9KTsKICAgIHZpc2l0W3N4XVtzeV0gPSB0cnVlOwogICAgd2hpbGUgKCFxLmVtcHR5KCkpIHsKICAgICAgICBpbnQgeCA9IHEuZnJvbnQoKS5maXJzdDsKICAgICAgICBpbnQgeSA9IHEuZnJvbnQoKS5zZWNvbmQ7CiAgICAgICAgcS5wb3AoKTsKCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKICAgICAgICAgICAgaW50IHUgPSB4ICsgc1hbaV07CiAgICAgICAgICAgIGludCB2ID0geSArIHNZW2ldOwoKICAgICAgICAgICAgaWYgKHUgPiBuIHx8IHUgPCAxKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKHYgPiBtIHx8IHYgPCAxKSBjb250aW51ZTsKCiAgICAgICAgICAgIGlmIChhW3VdW3ZdID09ICcwJyAmJiAhdmlzaXRbdV1bdl0pIHsKICAgICAgICAgICAgICAgIHZpc2l0W3VdW3ZdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHEucHVzaCh7dSwgdn0pOwogICAgICAgICAgICAgICAgZFt1XVt2XSA9IGRbeF1beV0gKyAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CmludCBtYWluKCkgewoJLy9mcmVvcGVuKCJDU0JOLklOUCIsICJyIiwgc3RkaW4pOwoJLy9mcmVvcGVuKCJDU0JOLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CgljaW4udGllKDApOwoJY291dC50aWUoMCk7CgkKICAgIG5oYXAoKTsKICAgIGlmKGFbMV1bMV0gPT0gJzEnKXsKICAgIAljb3V0IDw8IC0xOwogICAgCXJldHVybiAwOwoJfQogICAgYmZzKDEsMSk7CiAgICBpZihkW25dW21dPT0gMCkgY291dCA8PCAtMTsKCWVsc2UgY291dCA8PCBkW25dW21dOwoJCn0K