#include <bits/stdc++.h>
// zamiast pisac first, second pisze a, b
#define a first
#define b second
using namespace std;
// X - dlugosc pasa, Y - ilosc pasow, DP[x][y] - najmniejsza
// liczba skretow aby dostac sie na miejsce GRAF[x][y]
// GRAF[x][y] - informacje o autostradzie, VIS[x][y] - odwiedzony
// Q - kolejka przydatna do bfs'a
// ODW - ktore indeksy odwiedzalem - przyda sie
// w optymalizacji zerowania tablicy VIS
int X, Y, DP[1001][1001];
bool GRAF[1001][1001], VIS[1001][1001];
queue <pair <int, int>> Q;
vector <pair <int, int>> ODW;
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;
ODW.push_back({x, y});
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];
// na poczatku ustawiam max wartosc na kazdym elemencie
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);
// szukam min wsrod zakonczen autostrady
int mn = DP[X][1];
for (int j = 2; j <= Y; j ++)
mn = min(mn, DP[X][j]);
wy = min(wy, mn);
// zeruje odwiedzone elementy w tablicy VIS
for (auto a : ODW)
VIS[a.a][a.b] = 0;
ODW.clear();
}
if (wy != INF)
cout << wy;
else
cout << "NIE";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgovLyB6YW1pYXN0IHBpc2FjIGZpcnN0LCBzZWNvbmQgcGlzemUgYSwgYgoKI2RlZmluZSBhIGZpcnN0CiNkZWZpbmUgYiBzZWNvbmQKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBYIC0gZGx1Z29zYyBwYXNhLCBZIC0gaWxvc2MgcGFzb3csIERQW3hdW3ldIC0gbmFqbW5pZWpzemEKLy8gbGljemJhIHNrcmV0b3cgYWJ5IGRvc3RhYyBzaWUgbmEgbWllanNjZSBHUkFGW3hdW3ldCgovLyBHUkFGW3hdW3ldIC0gaW5mb3JtYWNqZSBvIGF1dG9zdHJhZHppZSwgVklTW3hdW3ldIC0gb2R3aWVkem9ueQoKLy8gUSAtIGtvbGVqa2EgcHJ6eWRhdG5hIGRvIGJmcydhCgovLyBPRFcgLSBrdG9yZSBpbmRla3N5IG9kd2llZHphbGVtIC0gcHJ6eWRhIHNpZQovLyB3IG9wdHltYWxpemFjamkgemVyb3dhbmlhIHRhYmxpY3kgVklTCgppbnQgWCwgWSwgRFBbMTAwMV1bMTAwMV07IApib29sIEdSQUZbMTAwMV1bMTAwMV0sIFZJU1sxMDAxXVsxMDAxXTsKcXVldWUgPHBhaXIgPGludCwgaW50Pj4gUTsKdmVjdG9yIDxwYWlyIDxpbnQsIGludD4+IE9EVzsKCnZvaWQgYmZzKGludCB4LCBpbnQgeSkgewoJUS5wdXNoKHt4LCB5fSk7CglEUFt4XVt5XSA9IDA7CgoJd2hpbGUgKCFRLmVtcHR5KCkpIHsKCQl4ID0gUS5mcm9udCgpLmE7CgkJeSA9IFEuZnJvbnQoKS5iOwoJCVEucG9wKCk7CgoJCWlmIChWSVNbeF1beV0pCgkJCWNvbnRpbnVlOwoKCQlWSVNbeF1beV0gPSAxOwoJCU9EVy5wdXNoX2JhY2soe3gsIHl9KTsKCgkJaWYgKHggPCBYIGFuZCAhR1JBRlt4ICsgMV1beV0pCgkJCURQW3ggKyAxXVt5XSA9IG1pbihEUFt4ICsgMV1beV0sIERQW3hdW3ldKSwgUS5wdXNoKHt4ICsgMSwgeX0pOwoKCQlpZiAoeSA+IDEgYW5kICFHUkFGW3hdW3kgLSAxXSkgewoJCQlEUFt4XVt5IC0gMV0gPSBtaW4oRFBbeF1beSAtIDFdLCBEUFt4XVt5XSArIDEpOwoJCQlpZiAoIVZJU1t4XVt5IC0gMV0pCgkJCQlRLnB1c2goe3gsIHkgLSAxfSk7CgkJfSBpZiAoeSA8IFkgYW5kICFHUkFGW3hdW3kgKyAxXSkgewoJCQlEUFt4XVt5ICsgMV0gPSBtaW4oRFBbeF1beSArIDFdLCBEUFt4XVt5XSArIDEpOwoJCQlpZiAoIVZJU1t4XVt5ICsgMV0pCgkJCQlRLnB1c2goe3gsIHkgKyAxfSk7CgkJfQoJfQp9CgppbnQgbWFpbigpIHsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CgljaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCQoJY2luID4+IFkgPj4gWDsKCglmb3IgKGludCB5ID0gMTsgeSA8PSBZOyB5ICsrKQoJCWZvciAoaW50IHggPSAxOyB4IDw9IFg7IHggKyspCgkJCWNpbiA+PiBHUkFGW3hdW3ldOwoKCgkvLyBuYSBwb2N6YXRrdSB1c3Rhd2lhbSBtYXggd2FydG9zYyBuYSBrYXpkeW0gZWxlbWVuY2llCgljb25zdCBpbnQgSU5GID0gMWU2ICsgMTsKCWludCB3eSA9IElORjsKCglmb3IgKGludCBqID0gMTsgaiA8PSBZOyBqICsrKQoJCWZvciAoaW50IGkgPSAxOyBpIDw9IFg7IGkgKyspCgkJCURQW2ldW2pdID0gSU5GOwoKCWZvciAoaW50IHkgPSAxOyB5IDw9IFk7IHkgKyspIHsKCQlpZiAoIUdSQUZbMV1beV0pCgkJCWJmcygxLCB5KTsKCgkJLy8gc3p1a2FtIG1pbiB3c3JvZCB6YWtvbmN6ZW4gYXV0b3N0cmFkeQoJCWludCBtbiA9IERQW1hdWzFdOwoJCWZvciAoaW50IGogPSAyOyBqIDw9IFk7IGogKyspCgkJCW1uID0gbWluKG1uLCBEUFtYXVtqXSk7CgkJd3kgPSBtaW4od3ksIG1uKTsKCgkJLy8gemVydWplIG9kd2llZHpvbmUgZWxlbWVudHkgdyB0YWJsaWN5IFZJUwoJCWZvciAoYXV0byBhIDogT0RXKQoJCQlWSVNbYS5hXVthLmJdID0gMDsKCQlPRFcuY2xlYXIoKTsKCX0KCglpZiAod3kgIT0gSU5GKQoJCWNvdXQgPDwgd3k7CgllbHNlCgkJY291dCA8PCAiTklFIjsKfQ==