#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
int d[505][505];
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, -1, 1};
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  for (int i = 0; i < (404); i++)
    for (int j = 0; j < (404); j++) {
      if (i == j)
        d[i][j] = 0;
      else
        d[i][j] = 1e5;
    }
  int H, W;
  cin >> H >> W;
  for (int i = 0; i < (H); i++) {
    string S;
    cin >> S;
    for (int j = 0; j < (W); j++)
      if (S[j] == '.') {
        for (int k = 0; k < (4); k++) {
          int ii = i + dx[k], jj = j + dy[k];
          if (ii < 0 || ii >= H) continue;
          if (jj < 0 || jj >= W) continue;
          d[ii * W + jj][i * W + j] = 1;
        }
      }
  }
  for (int k = 0; k < (H * W); k++)
    for (int i = 0; i < (H * W); i++)
      for (int j = 0; j < (H * W); j++) {
        d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
      }
  int ans = 0;
  for (int i = 0; i < (H * W); i++)
    for (int j = 0; j < (H * W); j++) {
      if (d[i][j] != 1e5) ans = max(ans, d[i][j]);
    }
  cout << ans << endl;
  return 0;
}
