def main(): import sys input = sys.stdin.read data = input().split() idx = 0 H = int(data[idx]) idx += 1 W = int(data[idx]) idx += 1 S = [] for _ in range(H): S.append(data[idx]) idx += 1 # Compute prefix sum of the grid sum_grid = [[0]*(W+2) for _ in range(H+2)] for i in range(1, H+1): for j in range(1, W+1): sum_grid[i][j] = sum_grid[i-1][j] + sum_grid[i][j-1] - sum_grid[i-1][j-1] if S[i-1][j-1] == '#': sum_grid[i][j] += 1 def check(k): if k == 0 or k > H or k > W: return False # Compute valid grid valid = [[0]*(W+2) for _ in range(H+2)] for i in range(1, H+1): for j in range(1, W+1): if i + k - 1 > H or j + k - 1 > W: continue a = i b = i + k - 1 c = j d = j + k - 1 total = sum_grid[b][d] - sum_grid[a-1][d] - sum_grid[b][c-1] + sum_grid[a-1][c-1] if total == k * k: valid[i][j] = 1 # Compute prefix sum of valid pre_valid = [[0]*(W+2) for _ in range(H+2)] for i in range(1, H+1): row_sum = 0 for j in range(1, W+1): row_sum += valid[i][j] pre_valid[i][j] = pre_valid[i-1][j] + row_sum # Check each black cell for x in range(1, H+1): for y in range(1, W+1): if S[x-1][y-1] == '#': a = max(1, x - k + 1) b = x c = max(1, y - k + 1) d = y if a > H or c > W or b < a or d < c: return False sum_rect = pre_valid[b][d] - pre_valid[a-1][d] - pre_valid[b][c-1] + pre_valid[a-1][c-1] if sum_rect == 0: return False return True low = 1 high = min(H, W) ans = 0 while low <= high: mid = (low + high) // 2 if check(mid): ans = mid low = mid + 1 else: high = mid - 1 print(ans) if __name__ == "__main__": main()