import sys W, H = map(int, raw_input().split()) C = ["" for _ in xrange(H)] matrix = [[0 for i in xrange(W)] for i in xrange(H)] # close range def range_check(i, mn, mx): return mn <= i < mx def euclidean_distance(x, y, length): return abs(x) + abs(y) <= length def dfs(C, matrix, x, y, current): mn = H * W if C[y][x] == "#" or matrix[y][x] != 0: return 0 matrix[y][x] = current for i in xrange(-1, 2): for j in xrange(-1, 2): if i == 0 and j == 0: continue if not (range_check(x + i, 0, W) and range_check(y + j, 0, H)): continue if not euclidean_distance(i, j, 1): continue result = dfs(C, matrix, x + i, y + j, current) mn = min(result, mn) return mn for i in xrange(H): C[i] = raw_input() current = 1 for i in xrange(H): for j in xrange(W): if C[i][j] == "." and matrix[i][j] == 0: dfs(C, matrix, j, i, current) current += 1 mn = W * H for j1 in xrange(H): for i1 in xrange(W): for j2 in xrange(H): for i2 in xrange(W): if i1 == i2 and j1 == j2: continue if C[j1][i1] == "#" or C[j2][i2] == "#": continue if matrix[j1][i1] == matrix[j2][i2]: continue mn = min(mn, abs(i1 - i2) + abs(j1 - j2) - 1) print mn