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

# print(maze)
    
# 最大距離の初期値
pmax = 0
    
# 任意の点をスタートに設定
# i,jから一番遠い点の距離を幅優先探索で計算
for i in range(H):
    for j in range(W):
        # 次に調べる座標リスト
        checkplace = [[i,j]]
#         print("checkplace:",checkplace)
        # すでに通った場所を記録
        pastplace = [[i,j]]

        # 深さのカウント
        count = 0

        while len(checkplace):
            # 深さのカウント
            nextplace = []
            for place in checkplace:
                h,w = place
                if h > 0 and maze[h-1][w] != "#":
                    #すでに踏んでいるかチェック
                    if [h-1,w] not in pastplace:
                        nextplace.append([h-1,w])
                        pastplace.append([h-1,w])

                if w < W-1 and maze[h][w+1] != "#":
                    #すでに踏んでいるかチェック
                    if [h, w+1] not in pastplace:
                        nextplace.append([h,w+1])
                        pastplace.append([h,w+1])

                if h < H-1 and maze[h+1][w] != "#":
                    #すでに踏んでいるかチェック
                    if [h+1,w] not in pastplace:
                        nextplace.append([h+1,w])
                        pastplace.append([h+1,w])

                if w > 0 and maze[h][w-1] != "#":
                    #すでに踏んでいるかチェック
                    if [h,w-1] not in pastplace:
                        nextplace.append([h,w-1])
                        pastplace.append([h,w-1])
            if len(nextplace) > 0:
                count += 1
            else:
                if count > pmax:
                    pmax = count
            checkplace = nextplace
#             print("count:",count,"nextplace:\n\t",nextplace)

print(pmax)