#include int h, w; int f[3002][3002]; int queue[9000000], get, set; int main() { scanf("%d%d", &h, &w); for(int i = 1; i <= h; i++) { char s[3002]; scanf("%s", s + 1); for(int j = 1; j <= w; j++) { f[i][j] = (s[j] == '.' ? 0 : -1); } } for(int i = 0; i <= h + 1; i++) { for(int j = 0; j <= w + 1; j++) { if(f[i][j] == 0) { for(int k = -1; k <= 1; k++) { for(int l = -1; l <= 1; l++) { if(k == 0 && l == 0) { continue; } if( ! (1 <= i + k && i + k <= h && 1 <= j + l && j + l <= w) ) { continue; } if(f[i + k][j + l] == -1) { f[i + k][j + l] = 1; queue[set++] = (i + k) * 4000 + (j + l); } } } } } } int max = 1; while(get != set) { int q = queue[get++]; int i = q / 4000; int j = q % 4000; for(int k = -1; k <= 1; k++) { for(int l = -1; l <= 1; l++) { if(k == 0 && l == 0) { continue; } if(f[i + k][j + l] == -1) { f[i + k][j + l] = f[i][j] + 1; if(max < f[i][j] + 1) { max = f[i][j] + 1; } queue[set++] = (i + k) * 4000 + (j + l); } } } } printf("%d\n", max); return 0; }