import sys def input(): return sys.stdin.readline().rstrip('\n') def main(): w, h = map(int, input().split()) def encode(i, j): return i * w + j c = [input() for _ in range(h)] d = [[float('inf')] * (h * w) for _ in range(h * w)] for i in range(h * w): d[i][i] = 0 for i in range(h): for j in range(w): if j != 0: d[encode(i, j)][encode(i, j - 1)] = d[encode(i, j - 1)][encode(i, j)] = \ 1 if c[i][j] == '#' or c[i][j - 1] == '#' else 0 if i != 0: d[encode(i, j)][encode(i - 1, j)] = d[encode(i - 1, j)][encode(i, j)] = \ 1 if c[i][j] == '#' or c[i - 1][j] == '#' else 0 for k in range(h * w): for i in range(h * w): for j in range(h * w): d[i][j] = min(d[i][j], d[i][k] + d[k][j]) ans = 0 for i in range(h): for j in range(w): for k in range(h): for s in range(w): if c[i][j] == '.' and c[k][s] == '.': ans = max(ans, d[encode(i, j)][encode(k, s)]) return ans - 1 if __name__ == '__main__': ret = main() if ret is not None: print(ret)