H,W = map(int,input().split())
maze = []
for i in range(H):
    s = list(input())
    maze.append(s)

def clear_maze(sx, sy, gx, gy, maze):
    INF = 100000000
    distance = [[INF for i in range(W)] for j in range(H)]
    #    distance = [[None]*field_x_length]*field_y_length

    def bfs():
        queue = []
        queue.insert(0, (sx, sy))
        distance[sx][sy] = 0

        while len(queue):
            x, y = queue.pop()

            if x == gx and y == gy:
                break

            for i in range(0, 4):
                nx, ny = x + [1, 0, -1, 0][i], y + [0, 1, 0, -1][i]

                if 0 <= nx and nx < H and 0 <= ny and ny < W and maze[nx][ny] != '#' and distance[nx][ny] == INF:
                        queue.insert(0, (nx, ny))
                        distance[nx][ny] = distance[x][y] + 1


        return distance[gx][gy]

    return bfs()

ans = 0
for sx in range(H):
    for sy in range(W):
        if maze[sx][sy] == ".":
            for gx in range(H):
                for gy in range(W):
                    if maze[gx][gy] == ".":
                        if clear_maze(sx,sy,gx,gy,maze) > ans:
                            ans = clear_maze(sx,sy,gx,gy,maze)

print(ans)