from collections import deque W, H = map(int,input().split()) C = [input() for _ in range(H)] INF=float('inf') visited = [[-1] * W for _ in range(H)] def group(val): for i in range(H): for j in range(W): if C[i][j] == "." and visited[i][j] == -1: si = i sj = j directions=[ (1,0), (-1,0), (0,1), (0,-1), ] visited[si][sj] = val que = deque() que.append((si, sj)) while que: i, j = que.popleft() for di, dj in directions: ni = i + di nj = j + dj if not (0 <= ni < H and 0 <= nj < W): continue if C[ni][nj] == "#": continue if visited[ni][nj] != -1: continue visited[ni][nj] = val que.append((ni, nj)) # 1つ目の空洞 group(0) # 2つ目の空洞 group(INF) # 一方からもう一方へ向かう que = deque() for i in range(H): for j in range(W): if visited[i][j] == 0: que.append((i, j)) directions=[ (1,0), (-1,0), (0,1), (0,-1), ] ans = INF while que: i, j = que.popleft() for di, dj in directions: ni = i + di nj = j + dj if not (0 < ni < H-1 and 0 < nj < W-1): continue if visited[ni][nj] == INF: ans = min(ans, visited[i][j]) continue if C[ni][nj] != "#": continue if visited[ni][nj] != -1 and visited[ni][nj] <= visited[i][j] + 1: continue visited[ni][nj] = visited[i][j] + 1 que.append((ni, nj)) print(ans)