#include <bits/stdc++.h>
using namespace std;
using in = int64_t;
const double PI = 3.14159265358979323846;
const in MOD = 1000000007;
const in INF = 1 << 30;
using P = pair<int, int>;
vector<int> dx = {0, 1, -1, 0};
vector<int> dy = {1, 0, 0, -1};
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int h, w, x, y, nx, ny;
  cin >> h >> w;
  vector<vector<char>> a(h, vector<char>(w));
  for (int i = 0; i < (int)(h); i++)
    for (int j = 0; j < (int)(w); j++) cin >> a[i][j];
  int ans = 0;
  for (int i = 0; i < (int)(h); i++)
    for (int j = 0; j < (int)(w); j++) {
      if (a[i][j] == '#') continue;
      queue<P> q;
      vector<vector<int>> seen(h, vector<int>(w, 0));
      q.push(P(i, j));
      while (q.size()) {
        x = q.front().second;
        y = q.front().first;
        q.pop();
        for (int k = 0; k < (int)(4); k++) {
          nx = x + dx[k];
          ny = y + dy[k];
          if (nx < 0 || ny < 0 || nx >= w || ny >= h || a[ny][nx] == '#')
            continue;
          seen[ny][nx] = seen[x][y] + 1;
          q.push(P(ny, nx));
        }
      }
      ans = max(ans, seen[ny][nx]);
    }
  cout << ans << endl;
}
