#include <bits/stdc++.h>
using namespace std;
int H, W;
char m[20][20];
int dd[20][20];
int d[20][20];
int ans;
void calc(int n, int h, int w) {
  if (h > 0) {
    if (m[h - 1][w] == '.' && d[h - 1][w] > n + 1) {
      d[h - 1][w] = n + 1;
      calc(n + 1, h - 1, w);
    }
  }
  if (h < H - 1) {
    if (m[h + 1][w] == '.' && d[h + 1][w] > n + 1) {
      d[h + 1][w] = n + 1;
      calc(n + 1, h + 1, w);
    }
  }
  if (w > 0) {
    if (m[h][w - 1] == '.' && d[h][w - 1] > n + 1) {
      d[h][w - 1] = n + 1;
      calc(n + 1, h, w - 1);
    }
  }
  if (w < W - 1) {
    if (m[h][w + 1] == '.' && d[h][w + 1] > n + 1) {
      d[h][w + 1] = n + 1;
      calc(n + 1, h, w + 1);
    }
  }
}
int maxd() {
  int r = 0;
  for (int i = 0; i < H; i++) {
    for (int j = 0; j < W; j++) {
      if (d[i][j] != 10000 && d[i][j] > r) {
        r = d[i][j];
      }
    }
  }
  return r;
}
int main() {
  ans = 0;
  cin >> H >> W;
  for (int i = 0; i < H; i++) {
    for (int j = 0; j < W; j++) {
      cin >> m[i][j];
      dd[i][j] = 10000;
    }
  }
  for (int i = 0; i < H; i++) {
    for (int j = 0; j < W; j++) {
      if (m[i][j] == '.') {
        memcpy(d, dd, sizeof(dd));
        calc(0, i, j);
        if (maxd() > ans) {
          ans = maxd();
        }
      }
    }
  }
  cout << ans << endl;
  return 0;
}
