INF = 1e18 from collections import deque W, H = map(int, input().split()) C = [input() for _ in range(H)] # start地点探す for i in range(H): for j in range(W): if C[i][j] == '.': si, sj = i, j break else: continue break dist = [[INF] * (W) for _ in range(H)] dist[si][sj] = 0 que = deque() que.append((si, sj)) def check(i, j): return 0 <= i < H and 0 <= j < W while que: i, j = que.popleft() for ii, jj in [(0, -1), (0, 1), (-1, 0), (1, 0)]: ni, nj = i+ii, j+jj if not check(ni, nj): continue if C[ni][nj] == '.': x = dist[i][j] # 短くできるなら if dist[ni][nj] > x: dist[ni][nj] = x que.appendleft((ni, nj)) else: x = dist[i][j] + 1 if dist[ni][nj] > x: dist[ni][nj] = x que.append((ni, nj)) ans = 0 for i in range(H): for j in range(W): if C[i][j] == '.': ans = max(ans, dist[i][j]) print(ans)