#include using namespace std; using ll = long long; int H, W; vector> v; vector S; bool solve(int X){ vector> w(H+2, vector(W+2)); for (int i=1; i<=H-X+1; i++){ for (int j=1; j<=W-X+1; j++){ if (v[i+X-1][j+X-1]-v[i+X-1][j-1]-v[i-1][j+X-1]+v[i-1][j-1] == X*X){ w[i][j]++; w[i+X][j]--; w[i][j+X]--; w[i+X][j+X]++; } } } for (int i=0; i<=H; i++){ for (int j=1; j<=W; j++){ w[i][j] += w[i][j-1]; } } for (int i=1; i<=H; i++){ for (int j=0; j<=W; j++){ w[i][j] += w[i-1][j]; } } for (int i=1; i<=H; i++){ for (int j=1; j<=W; j++){ if (S[i-1][j-1] == '#' && w[i][j] == 0) return 0; } } return 1; } int main(){ cin >> H >> W; S.resize(H); for (int i=0; i> S[i]; v.resize(H+1, vector(W+1)); for (int i=1; i<=H; i++){ for (int j=1; j<=W; j++){ if (S[i-1][j-1] == '#') v[i][j]++; v[i][j] += v[i-1][j] + v[i][j-1] - v[i-1][j-1]; } } int l=1, r=min(H, W)+1, c; while(r-l>1){ c = (r+l)/2; if (solve(c)) l=c; else r=c; } cout << l << endl; return 0; }