from collections import deque
H,W=map(int,input().split())
MAZE=[list(input()) for _ in range(H)]

d=((-1,0),(0,-1),(1,0),(0,1))
ans_l=set()

def search(pos):
    D=[[0]*W for _ in range(H)]
    while len(pos)>0:
        x,y,depth=pos.popleft()
        for i in range(4):
            nx=x+d[i][0]
            ny=y+d[i][1]
            if 0<=nx<H and 0<=ny<W and MAZE[nx][ny]=='.' and D[nx][ny]!=-1:
                pos.append((nx,ny,depth+1))
                D[nx][ny]=-1
    return depth

for i in range(H):
    for j in range(W):
        if MAZE[i][j]=='.':
            p=deque([[i,j,0]])
            ans_l.add(search(p))

print(max(ans_l))
