// HoaiNam
#include <bits/stdc++.h>
#define endl "\n"
#define int long long
#define all(x) x.begin(), x.end()
#define NAME ""
using namespace std;
const int N = 1e3 + 1;
const int INF = 1e9;
const int mod = 1e9 + 7;
int dx[] = { -1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
int n, m, dist[N][N];
char A[N][N];
void bfs() {
queue<pair<int, int>> q;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j) {
dist[i][j] = INF;
}
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j) {
if (A[i][j] == '1') {
q.push({i, j});
dist[i][j] = 0;
}
}
while (!q.empty()) {
auto [u, v] = q.front();
q.pop();
for (int i = 0; i < 4; ++i) {
int x = u + dx[i];
int y = v + dy[i];
if (x >= 1 && x <= n && y >= 1 && y <= m && dist[x][y] > dist[u][v] + 1) {
dist[x][y] = dist[u][v] + 1;
q.push({x, y});
}
}
}
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
if (fopen(NAME".INP", "r")) {
freopen(NAME".INP", "r", stdin);
freopen(NAME".OUT", "w", stdout);
}
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
cin >> A[i][j];
}
}
bfs();
int ans = 0;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
if (dist[i][j] != INF) ans = max(ans, dist[i][j]);
}
}
cout << ans;
// HoaiNam
}
Ly8gSG9haU5hbQojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBlbmRsICJcbiIKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQojZGVmaW5lIE5BTUUgIiIKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBOID0gMWUzICsgMTsKY29uc3QgaW50IElORiA9IDFlOTsKY29uc3QgaW50IG1vZCA9IDFlOSArIDc7CgppbnQgZHhbXSA9IHsgLTEsIDAsIDEsIDB9OwppbnQgZHlbXSA9IHswLCAxLCAwLCAtMX07CgppbnQgbiwgbSwgZGlzdFtOXVtOXTsKY2hhciBBW05dW05dOwoKdm9pZCBiZnMoKSB7CiAgICBxdWV1ZTxwYWlyPGludCwgaW50Pj4gcTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkKICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBtOyArK2opIHsKICAgICAgICAgICAgZGlzdFtpXVtqXSA9IElORjsKICAgICAgICB9CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpCiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbTsgKytqKSB7CiAgICAgICAgICAgIGlmIChBW2ldW2pdID09ICcxJykgewogICAgICAgICAgICAgICAgcS5wdXNoKHtpLCBqfSk7CiAgICAgICAgICAgICAgICBkaXN0W2ldW2pdID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICB3aGlsZSAoIXEuZW1wdHkoKSkgewogICAgICAgIGF1dG8gW3UsIHZdID0gcS5mcm9udCgpOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKICAgICAgICAgICAgaW50IHggPSB1ICsgZHhbaV07CiAgICAgICAgICAgIGludCB5ID0gdiArIGR5W2ldOwogICAgICAgICAgICBpZiAoeCA+PSAxICYmIHggPD0gbiAmJiB5ID49IDEgJiYgeSA8PSBtICYmIGRpc3RbeF1beV0gPiBkaXN0W3VdW3ZdICsgMSkgewogICAgICAgICAgICAgICAgZGlzdFt4XVt5XSA9IGRpc3RbdV1bdl0gKyAxOwogICAgICAgICAgICAgICAgcS5wdXNoKHt4LCB5fSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCnNpZ25lZCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKCiAgICBpZiAoZm9wZW4oTkFNRSIuSU5QIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4oTkFNRSIuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihOQU1FIi5PVVQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgY2luID4+IG4gPj4gbTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIHsKICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBtOyArK2opIHsKICAgICAgICAgICAgY2luID4+IEFbaV1bal07CiAgICAgICAgfQogICAgfQoKICAgIGJmcygpOwoKICAgIGludCBhbnMgPSAwOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbTsgKytqKSB7CiAgICAgICAgICAgIGlmIChkaXN0W2ldW2pdICE9IElORikgYW5zID0gbWF4KGFucywgZGlzdFtpXVtqXSk7CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBhbnM7CgogICAgLy8gSG9haU5hbQp9Cg==