#include #include #include #include #include #include #include #include #include #include #include static const int MOD = 1000000007; using ll = long long; using u32 = uint32_t; using namespace std; template constexpr T INF = ::numeric_limits::max() / 32 * 15 + 208; int main() { int h, w; cin >> h >> w; vector> d(h+4, vector (w+4, -1)); queue> p; for (int i = 0; i <= h+1; ++i) { for (int j = 0; j <= w+1; ++j) { if(i == 0 || j == 0 || i == h+1 || j == w+1) { d[i+1][j+1] = 0; p.emplace(i, j); } } } for (int i = 0; i < h; ++i) { string s; cin >> s; for (int j = 0; j < w; ++j) { d[i+2][j+2] = (s[j] == '.' ? 0 : INF); if(s[j] == '.'){ p.emplace(i+1, j+1); } } } int ans = 0; while(!p.empty()){ int i, j; tie(i, j) = p.front(); p.pop(); for (int dy = -1; dy <= 1; ++dy) { for (int dx = -1; dx <= 1; ++dx) { if(!dy && !dx) continue; if(d[i+1+dx][j+1+dy] == -1) continue; if(d[i+1+dx][j+1+dy] > d[i+1][j+1]+1){ p.emplace(i+dx, j+dy); d[i+1+dx][j+1+dy] = d[i+1][j+1]+1; ans = max(ans, d[i+1][j+1]+1); } } } } cout << ans << "\n"; return 0; }