#include <bits/stdc++.h>
#define a first
#define b second
using namespace std;
int X, Y, DP[1001][1001];
bool GRAF[1001][1001], VIS[1001][1001];
queue <pair <int, int>> Q;
void bfs(int x, int y) {
Q.push({x, y});
DP[x][y] = 0;
while (!Q.empty()) {
x = Q.front().a;
y = Q.front().b;
Q.pop();
if (VIS[x][y])
continue;
VIS[x][y] = 1;
if (x < X and !GRAF[x + 1][y])
DP[x + 1][y] = min(DP[x + 1][y], DP[x][y]), Q.push({x + 1, y});
if (y > 1 and !GRAF[x][y - 1]) {
DP[x][y - 1] = min(DP[x][y - 1], DP[x][y] + 1);
if (!VIS[x][y - 1])
Q.push({x, y - 1});
} if (y < Y and !GRAF[x][y + 1]) {
DP[x][y + 1] = min(DP[x][y + 1], DP[x][y] + 1);
if (!VIS[x][y + 1])
Q.push({x, y + 1});
}
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> Y >> X;
for (int y = 1; y <= Y; y ++)
for (int x = 1; x <= X; x ++)
cin >> GRAF[x][y];
const int INF = 1e6 + 1;
int wy = INF;
for (int j = 1; j <= Y; j ++)
for (int i = 1; i <= X; i ++)
DP[i][j] = INF;
for (int y = 1; y <= Y; y ++) {
if (!GRAF[1][y])
bfs(1, y);
int mn = DP[X][1];
for (int j = 2; j <= Y; j ++)
mn = min(mn, DP[X][j]);
wy = min(wy, mn);
for (int j = 1; j <= Y; j ++)
for (int i = 1; i <= X; i ++)
VIS[i][j] = 0;
}
if (wy != INF)
cout << wy;
else
cout << "NIE";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGEgZmlyc3QKI2RlZmluZSBiIHNlY29uZAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBYLCBZLCBEUFsxMDAxXVsxMDAxXTsKYm9vbCBHUkFGWzEwMDFdWzEwMDFdLCBWSVNbMTAwMV1bMTAwMV07CnF1ZXVlIDxwYWlyIDxpbnQsIGludD4+IFE7Cgp2b2lkIGJmcyhpbnQgeCwgaW50IHkpIHsKCVEucHVzaCh7eCwgeX0pOwoJRFBbeF1beV0gPSAwOwoKCXdoaWxlICghUS5lbXB0eSgpKSB7CgkJeCA9IFEuZnJvbnQoKS5hOwoJCXkgPSBRLmZyb250KCkuYjsKCQlRLnBvcCgpOwoKCQlpZiAoVklTW3hdW3ldKQoJCQljb250aW51ZTsKCgkJVklTW3hdW3ldID0gMTsKCgkJaWYgKHggPCBYIGFuZCAhR1JBRlt4ICsgMV1beV0pCgkJCURQW3ggKyAxXVt5XSA9IG1pbihEUFt4ICsgMV1beV0sIERQW3hdW3ldKSwgUS5wdXNoKHt4ICsgMSwgeX0pOwoKCQlpZiAoeSA+IDEgYW5kICFHUkFGW3hdW3kgLSAxXSkgewoJCQlEUFt4XVt5IC0gMV0gPSBtaW4oRFBbeF1beSAtIDFdLCBEUFt4XVt5XSArIDEpOwoJCQlpZiAoIVZJU1t4XVt5IC0gMV0pCgkJCQlRLnB1c2goe3gsIHkgLSAxfSk7CgkJfSBpZiAoeSA8IFkgYW5kICFHUkFGW3hdW3kgKyAxXSkgewoJCQlEUFt4XVt5ICsgMV0gPSBtaW4oRFBbeF1beSArIDFdLCBEUFt4XVt5XSArIDEpOwoJCQlpZiAoIVZJU1t4XVt5ICsgMV0pCgkJCQlRLnB1c2goe3gsIHkgKyAxfSk7CgkJfQoJfQp9CgppbnQgbWFpbigpIHsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CgljaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCQoJY2luID4+IFkgPj4gWDsKCglmb3IgKGludCB5ID0gMTsgeSA8PSBZOyB5ICsrKQoJCWZvciAoaW50IHggPSAxOyB4IDw9IFg7IHggKyspCgkJCWNpbiA+PiBHUkFGW3hdW3ldOwoKCWNvbnN0IGludCBJTkYgPSAxZTYgKyAxOwoJaW50IHd5ID0gSU5GOwoKCWZvciAoaW50IGogPSAxOyBqIDw9IFk7IGogKyspCgkJZm9yIChpbnQgaSA9IDE7IGkgPD0gWDsgaSArKykKCQkJRFBbaV1bal0gPSBJTkY7CgoJZm9yIChpbnQgeSA9IDE7IHkgPD0gWTsgeSArKykgewoJCWlmICghR1JBRlsxXVt5XSkKCQkJYmZzKDEsIHkpOwoKCQlpbnQgbW4gPSBEUFtYXVsxXTsKCQlmb3IgKGludCBqID0gMjsgaiA8PSBZOyBqICsrKQoJCQltbiA9IG1pbihtbiwgRFBbWF1bal0pOwoJCXd5ID0gbWluKHd5LCBtbik7CgoJCWZvciAoaW50IGogPSAxOyBqIDw9IFk7IGogKyspCgkJCWZvciAoaW50IGkgPSAxOyBpIDw9IFg7IGkgKyspCgkJCQlWSVNbaV1bal0gPSAwOwoJfQoKCWlmICh3eSAhPSBJTkYpCgkJY291dCA8PCB3eTsKCWVsc2UKCQljb3V0IDw8ICJOSUUiOwp9