#include <bits/stdc++.h>
using namespace std;
int main(void) {
  int h, w;
  char c[21][21];
  int num[21][21];
  cin >> h >> w;
  for (int i = 0; i < h; i++)
    for (int j = 0; j < w; j++) {
      cin >> c[i][j];
    }
  queue<pair<int, int>> que;
  queue<int> que_num;
  int dx[4] = {0, -1, 0, 1};
  int dy[4] = {1, 0, -1, 0};
  int ans = 0;
  int cnt = 0;
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      if (c[i][j] == '#') continue;
      que.push(make_pair(i, j));
      que_num.push(0);
      for (int y = 0; y < h; y++) {
        for (int x = 0; x < w; x++) {
          num[y][x] = 1000000;
        }
      }
      num[i][j] = 0;
      while (!que.empty()) {
        pair<int, int> P = que.front();
        int y = P.first;
        int x = P.second;
        int temp_num = que_num.front();
        que.pop();
        que_num.pop();
        for (int i = 0; i < 4; i++) {
          cnt++;
          int nx = x + dx[i];
          int ny = y + dy[i];
          if (c[ny][nx] == '.' && c[y][x] == '.' && nx >= 0 && ny >= 0 &&
              nx < w && ny < h) {
            if (temp_num < num[ny][nx]) {
              num[ny][nx] = temp_num + 1;
              que.push(make_pair(ny, nx));
              que_num.push(temp_num + 1);
              if (ans < temp_num) ans = temp_num + 1;
            }
          }
        }
      }
    }
  }
  cout << ans << endl;
}
