#include <bits/stdc++.h>
using namespace std;
int H, W;
char S[20][20];
int pass[20][20];
void walk_count(int count, int now_h, int now_w) {
  if (count > 10) {
    cout << count << ' ' << now_h << ' ' << now_w << endl;
  }
  pass[now_h][now_w] = count;
  if (now_h != 0 && S[now_h - 1][now_w] != '#' &&
      count + 1 < pass[now_h - 1][now_w]) {
    walk_count(count + 1, now_h - 1, now_w);
  }
  if (now_w + 1 < W && S[now_h][now_w + 1] != '#' &&
      count + 1 < pass[now_h][now_w + 1]) {
    walk_count(count + 1, now_h, now_w + 1);
  }
  if (now_h + 1 < H && S[now_h + 1][now_w] != '#' &&
      count + 1 < pass[now_h + 1][now_w]) {
    walk_count(count + 1, now_h + 1, now_w);
  }
  if (now_w != 0 && S[now_h][now_w - 1] != '#' &&
      count + 1 < pass[now_h][now_w - 1]) {
    walk_count(count + 1, now_h, now_w - 1);
  }
}
int main() {
  cin >> H >> W;
  for (int i = 0; i < H; i++) {
    for (int j = 0; j < W; j++) {
      cin >> S[i][j];
    }
  }
  int ans = 0;
  for (int i = 0; i < H; i++) {
    for (int j = 0; j < W; j++) {
      if (S[i][j] == '#') {
        continue;
      } else {
        for (int k = 0; k <= 20; k++) {
          for (int l = 0; l <= 20; l++) {
            pass[k][l] = 1e9;
          }
        }
        walk_count(0, i, j);
        int ans_count = 0;
        for (int k = 0; k < H; k++) {
          for (int l = 0; l < W; l++) {
            if (pass[k][l] != 1e9 && pass[k][l] > ans_count) {
              ans_count = pass[k][l];
            }
          }
        }
        ans = max(ans, ans_count);
      }
    }
  }
  cout << ans << endl;
}
