#include <bits/stdc++.h>
using namespace std;
const int N = 25, M = 1010;
int n, m, res;
int dist[N][N];
pair<int, int> q[M];
char g[N][N];
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};
void bfs(int x, int y) {
  memset(dist, 0, sizeof dist);
  int hh = 0, tt = -1;
  q[++tt] = {x, y};
  while (hh <= tt) {
    auto t = q[hh++];
    for (int i = 0; i < 4; i++) {
      int tx = t.first + dx[i];
      int ty = t.second + dy[i];
      if (tx < 0 || ty < 0 || tx >= n || ty >= m) continue;
      if (g[tx][ty] == '#' || dist[tx][ty]) continue;
      q[++tt] = {tx, ty};
      int d = dist[t.first][t.second] + 1;
      res = max(res, d);
      dist[tx][ty] = d;
    }
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) scanf("%s", g[i]);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (g[i][j] == '.') bfs(i, j);
  printf("%d\n", res);
  return 0;
}
