#include template T in() { abort(); return T(); } template<> std::string in() { std::string str; std::cin >> str; return str; } template<> int in() { int x; scanf("%d", &x); return x; } template void out(T x) { abort(); } template<> void out(std::string x) { std::cout << x << std::endl; } template<> void out(int x) { printf("%d\n", x); } char field[4096][4096]; int dp[4096][4096]; int h, w; int main() { h = in(); w = in(); for(int i = 0; i < h; ++i) { scanf("%s", field[i]); } int res = 0; for(int i = 0; i < w; ++i) { if( field[0][i] == '#' ) { dp[0][i] = 1; res = 1; } } for(int i = 0; i < h; ++i) { if( field[i][0] == '#' ) { dp[i][0] = 1; res = 1; } } for(int i = 1; i < h; ++i) { for(int j = 1; j < w; ++j) { if( field[i][j] == '.' ) { dp[i][j] = 0; } else { dp[i][j] = 1 + std::min(dp[i][j-1], std::min(dp[i-1][j-1], dp[i-1][j])); res = std::max(dp[i][j], res); } } } out((res + 1) / 2); return 0; }