#include <bits/stdc++.h>
using namespace std;
int r, c_;
char c[20][20] = {};
long long int memo[20][20] = {};
void search(int x, int y, int t) {
  if (y >= r || x >= c_ || x < 0 || y < 0 || c[y][x] == '#') {
    return;
  } else if (memo[y][x] <= t && memo[y][x] > 0) {
    return;
  }
  memo[y][x] = t;
  search(x + 1, y, t + 1);
  search(x - 1, y, t + 1);
  search(x, y + 1, t + 1);
  search(x, y - 1, t + 1);
}
void filling() {
  for (int i = 0; i < 20; i++) {
    for (int j = 0; j < 20; j++) {
      memo[i][j] = 0;
    }
  }
}
int main() {
  cin >> r >> c_;
  for (int i = 0; i < r; i++)
    for (int j = 0; j < c_; j++) {
      cin >> c[i][j];
    }
  long long ans = 0, sum = 0;
  for (int i = 0; i < r; i++) {
    for (int j = 0; j < c_; j++) {
      filling();
      search(i, j, 0);
      for (int k = 0; k < r; k++) {
        for (int l = 0; l < c_; l++) {
          ans = max(ans, memo[k][l]);
        }
      }
    }
  }
  cout << ans << endl;
  return 0;
}
