import sys def main(): H, W = map(int, sys.stdin.readline().split()) grid = [] black = [] white = set() for i in range(H): S = sys.stdin.readline().strip() grid_row = [] for j in range(W): if S[j] == '#': black.append((i+1, j+1)) else: white.add((i+1, j+1)) grid.append(S) # Precompute cumulative sum for white cells (1-based index) cum_white = [[0]*(W+2) for _ in range(H+2)] for i in range(1, H+1): for j in range(1, W+1): cum_white[i][j] = cum_white[i-1][j] + cum_white[i][j-1] - cum_white[i-1][j-1] if (i, j) in white: cum_white[i][j] += 1 max_k = min(H, W) for k in range(max_k, 0, -1): a_max = H - k + 1 b_max = W - k + 1 if a_max < 1 or b_max < 1: continue # Collect allowed (a, b) allowed = [] for a in range(1, a_max + 1): for b in range(1, b_max + 1): i2 = a + k - 1 j2 = b + k - 1 # Check if there are no white cells in the k x k square starting at (a, b) count = cum_white[i2][j2] - cum_white[a-1][j2] - cum_white[i2][b-1] + cum_white[a-1][b-1] if count == 0: allowed.append((a, b)) if not allowed: continue # Check all black cells are covered by at least one allowed (a, b) valid = True for (i, j) in black: a_start = max(1, i - k + 1) a_end = min(a_max, i) b_start = max(1, j - k + 1) b_end = min(b_max, j) found = False for a in range(a_start, a_end + 1): i1 = a i2 = a + k - 1 if i1 > i or i2 < i: continue for b in range(b_start, b_end + 1): j1 = b j2 = b + k - 1 if j1 > j or j2 < j: continue if (a, b) in allowed: found = True break if found: break if not found: valid = False break if valid: print(k) return print(1) if __name__ == "__main__": main()