#include <bits/stdc++.h>
using namespace std;
long long power(long long x, long long y, long long m) {
  if (y == 0) return 1;
  long long p = power(x, y / 2, m) % m;
  p = (p * p) % m;
  return (y % 2 == 0) ? p : (x * p) % m;
}
long long modInv(long long x) {
  return power(x, 1000000007 - 2, 1000000007) % 1000000007;
}
long long func(char s[20][20], long long h, long long w, long long i,
               long long j, long long dx, long long dy, bool vis[20][20]) {
  queue<pair<long long, long long>> q;
  q.push(make_pair(i, j));
  long long ans = 0;
  while (q.empty() == 0) {
    long long z = q.size();
    for (int l = 0; l < z; l++) {
      pair<long long, long long> p = q.front();
      q.pop();
      vis[p.first][p.second] = true;
      if (p.first == dx && p.second == dy) return ans;
      if (p.first - 1 >= 0 && vis[p.first - 1][p.second] == false &&
          s[p.first - 1][p.second] == '.')
        q.push(make_pair(p.first - 1, p.second));
      if (p.second + 1 < w && vis[p.first][p.second + 1] == false &&
          s[p.first][p.second + 1] == '.')
        q.push(make_pair(p.first, p.second + 1));
      if (p.first + 1 < h && vis[p.first + 1][p.second] == false &&
          s[p.first + 1][p.second] == '.')
        q.push(make_pair(p.first + 1, p.second));
      if (p.second - 1 >= 0 && vis[p.first][p.second - 1] == false &&
          s[p.first][p.second - 1] == '.')
        q.push(make_pair(p.first, p.second - 1));
    }
    ans++;
  }
  return ans;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  long long h, w;
  cin >> h >> w;
  char s[20][20];
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) cin >> s[i][j];
  }
  long long ans = 0;
  bool vis[20][20];
  memset(vis, false, sizeof(vis));
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      for (int l = 0; l < h; l++) {
        for (int r = 0; r < w; r++) {
          if (s[i][j] != '#' && s[l][r] != '#') {
            memset(vis, false, sizeof(vis));
            long long z = func(s, h, w, i, j, l, r, vis);
            ans = max(ans, z);
          }
        }
      }
    }
  }
  cout << ans << endl;
  return 0;
}
