W, H = map(int, input().split()) maze = [input() for i in range(H)] dist = [[W * H for j in range(W * H)] for j in range(W * H)] for y in range(H): for x in range(W): dist[y * W + x][y * W + x] = 0 for dy, dx in ((0, 1), (0, -1), (-1, 0), (1, 0)): if 0 <= y + dy < H and 0 <= x + dx < W: if maze[y + dy][x + dx] == '#': dist[y * W + x][(y + dy) * W + (x + dx)] = 1 else: dist[y * W + x][(y + dy) * W + (x + dx)] = 0 for k in range(W * H): for i in range(W * H): for j in range(W * H): dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]) min_cost = W * H for y in range(H): for x in range(W): if maze[y][x] == '#': continue for i in range(y, H): for j in range(W): if maze[i][j] == '#': continue if dist[y * W + x][i * W + j] > 0: min_cost = min(min_cost, dist[y * W + x][i * W + j]) print(min_cost)