from collections import deque

H, W = map(int, input().split())
S = [list(input()) for _ in range(H)]

# ある地点を渡すと、その地点から到達可能かつ距離未計算の地点のリストを返す
def not_investigated_positions(current_position):
    output = []
    for udrl in [[0, 1], [0, -1], [1, 0], [-1, 0]]:
        y = current_position[0]+udrl[0]
        x = current_position[1]+udrl[1]
        if 0 <= y <= H-1 and 0 <= x <= W-1:
            if S[y][x] == "." and distance[y][x] == -1:
                output.append([y, x])
    return output

ans = 0
for sy in range(H):
    for sx in range(W):
        for gy in range(H):
            for gx in range(W):
                if S[sy][sx] == "#" or S[gy][gx] == "#":
                    continue
                distance = [[-1]*W for _ in range(H)]
                current_position = [sy, sx]
                distance[sy][sx] = 0
                next_positions = deque()
                next_positions.append(current_position)

                while next_positions and current_position != [gy, gx]:
                    current_position = next_positions.popleft()
                    for q in not_investigated_positions(current_position):
                        distance[q[0]][q[1]] = distance[current_position[0]][current_position[1]] + 1
                        next_positions.append(q)

                ans = max(ans, distance[gy][gx])

print(ans)
