h, w = map(int, input().split())

maze = []

for i in range(h):
  a  = list(input())
  maze.append(a)

#print(maze)

max = 0

import numpy as np

mcount = np.ones((h, w), dtype = int) * -999

for i in range(len(maze)):
  for j in range(len(maze[0])):
    if maze[i][j] == ".":
      mcount[i,j] = 0
      changed = True
      while changed:
        changed = False
        for k in range(len(maze)):
          for l in range(len(maze[0])):
            if k != 0:
              if maze[k-1][l] != "#" and mcount[k-1,l] ==-999 and mcount[k,l] != -999:
                mcount[k-1, l] = mcount[k,l] + 1
                changed = True
            if k != h-1:
              if maze[k+1][l] != "#" and mcount[k+1, l] ==-999 and mcount[k,l] != -999:
                mcount[k+1, l] = mcount[k,l] + 1
                changed = True
            if l != 0:
              if maze[k][l-1] != "#" and mcount[k,l-1] ==-999 and mcount[k,l] != -999:
                mcount[k, l-1] = mcount[k,l] + 1
                changed = True
            if l != w-1:
              if maze[k][l+1] != "#" and mcount[k,l+1] ==-999 and mcount[k,l] != -999:
                mcount[k, l+1] = mcount[k,l] + 1
                changed = True
            #print(mcount)
      if np.max(mcount) > max:
        max = np.max(mcount)
      mcount[:,:] = -999

print(max)