#include <bits/stdc++.h>
using namespace std;
const long long inf = 1e9 + 7;
const long long mod = 998244353;
vector<vector<long long> > d(410, vector<long long>(410, inf));
void Warshall_Floyd(long long n) {
  for (int k = (1); k < (n + 1); k++) {
    for (int i = (1); i < (n + 1); i++) {
      for (int j = (1); j < (n + 1); j++)
        d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
    }
  }
}
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
int main() {
  long long h, w;
  cin >> h >> w;
  vector<vector<char> > m(h + 2, vector<char>(w + 2, '#'));
  for (int i = (1); i < (h + 1); i++) {
    for (int j = (1); j < (w + 1); j++) {
      cin >> m[i][j];
    }
  }
  for (int i = (1); i < (h + 1); i++) {
    for (int j = (1); j < (w + 1); j++) {
      if (m[i][j] == '#') continue;
      d[(i - 1) * h + j][(i - 1) * h + j] = 0;
      for (int k = (0); k < (4); k++) {
        long long nx = i + dx[k], ny = j + dy[k];
        if (m[nx][ny] == '.') {
          d[(i - 1) * h + j][(nx - 1) * h + ny] = 1;
        }
      }
    }
  }
  Warshall_Floyd(h * w);
  long long ma = 0;
  for (int i = (1); i < (h * w + 1); i++) {
    for (int j = (1); j < (h * w + 1); j++) {
      if (d[i][j] < inf) ma = max(ma, d[i][j]);
    }
  }
  cout << ma << endl;
}
