#include <iostream>
#include <queue>
using namespace std;
int a[1000][1000];
int d[1000][1000];
int dx[] = { 0,0,1,-1 };
int dy[] = { 1,-1,0,0 };
int main() {
int m, n;
cin >> m >> n;
queue<pair<int, int>> q;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> a[i][j];
d[i][j] = -1;
if (a[i][j] == 1) {
q.push(make_pair(i, j));
d[i][j] = 0; //이미 익어있는 것이므로 날짜증가X
}
}
}
while (!q.empty()) {
int x = q.front().first;
int y = q.front().second;
q.pop();
for (int k = 0; k < 4; k++) {
int nx = x + dx[k];
int ny = y + dy[k];
if (nx >= 0 && nx < n&&ny >= 0 && ny < m) {
if (a[nx][ny] == 0 && d[nx][ny] == -1) {
d[nx][ny] = d[x][y] + 1;
q.push(make_pair(nx, ny));
}
}
}
}
int ans = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (ans < d[i][j])
ans = d[i][j];
else if (a[i][j] == 0 && d[i][j] == -1)
ans = -1;
}
}
cout << ans << '\n';
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cXVldWU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBhWzEwMDBdWzEwMDBdOwppbnQgZFsxMDAwXVsxMDAwXTsKaW50IGR4W10gPSB7IDAsMCwxLC0xIH07CmludCBkeVtdID0geyAxLC0xLDAsMCB9OwppbnQgbWFpbigpIHsKCWludCBtLCBuOwoJY2luID4+IG0gPj4gbjsKCXF1ZXVlPHBhaXI8aW50LCBpbnQ+PiBxOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKCQlmb3IgKGludCBqID0gMDsgaiA8IG07IGorKykgewoJCQljaW4gPj4gYVtpXVtqXTsKCQkJZFtpXVtqXSA9IC0xOwoJCQlpZiAoYVtpXVtqXSA9PSAxKSB7CgkJCQlxLnB1c2gobWFrZV9wYWlyKGksIGopKTsKCQkJCWRbaV1bal0gPSAwOyAvL+ydtOuvuCDsnbXslrTsnojripQg6rKD7J2066+A66GcIOuCoOynnOymneqwgFgKCQkJfQoJCX0KCX0KCXdoaWxlICghcS5lbXB0eSgpKSB7CgkJaW50IHggPSBxLmZyb250KCkuZmlyc3Q7CgkJaW50IHkgPSBxLmZyb250KCkuc2Vjb25kOwoJCXEucG9wKCk7CgkJZm9yIChpbnQgayA9IDA7IGsgPCA0OyBrKyspIHsKCQkJaW50IG54ID0geCArIGR4W2tdOwoJCQlpbnQgbnkgPSB5ICsgZHlba107CgkJCWlmIChueCA+PSAwICYmIG54IDwgbiYmbnkgPj0gMCAmJiBueSA8IG0pIHsKCQkJCWlmIChhW254XVtueV0gPT0gMCAmJiBkW254XVtueV0gPT0gLTEpIHsKCQkJCQlkW254XVtueV0gPSBkW3hdW3ldICsgMTsKCQkJCQlxLnB1c2gobWFrZV9wYWlyKG54LCBueSkpOwoJCQkJfQoJCQl9CgkJfQoJfQoJaW50IGFucyA9IDA7Cglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewoJCWZvciAoaW50IGogPSAwOyBqIDwgbTsgaisrKSB7CgkJCWlmIChhbnMgPCBkW2ldW2pdKQoJCQkJYW5zID0gZFtpXVtqXTsKCQkJZWxzZSBpZiAoYVtpXVtqXSA9PSAwICYmIGRbaV1bal0gPT0gLTEpCgkJCQlhbnMgPSAtMTsKCQl9Cgl9CgoJY291dCA8PCBhbnMgPDwgJ1xuJzsKCXJldHVybiAwOwp9