#include <bits/stdc++.h>
using namespace std;
const int N = 110, M = 10010;
int n, m, res;
int d[N][N];
pair<int, int> q[M];
char g[N][N];
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};
void bfs(int x, int y) {
  memset(d, -1, sizeof d);
  int hh = 0, tt = -1;
  q[++tt] = {x, y};
  d[x][y] = 0;
  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 || tx >= n || ty < 0 || ty >= m) continue;
      if (d[tx][ty] != -1 || g[tx][ty] != '.') continue;
      int td = d[t.first][t.second] + 1;
      res = max(res, td);
      d[tx][ty] = td;
      q[++tt] = {tx, ty};
    }
  }
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) cin >> g[i];
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) bfs(i, j);
  cout << res << endl;
  return 0;
}
