#include <bits/stdc++.h>
using namespace std;

int main() {
  int h,w,ans=0;
  cin >> h >> w;
  vector<char> s(h*w);
  for(int i=0;i<h*w;i++) cin >> s[i];
  vector<vector<int>> g(h*w);
  for(int i=0;i<h;i++){
    for(int j=0;w>1 && j<(w-1);j++){
      if (s[i*w+j] == '.' && s[i*w+j+1] == '.'){
        g.at(i*w+j).push_back(i*w+j+1);
        g.at(i*w+j+1).push_back(i*w+j);
      }
    }
  }
  for(int i=0;i<w;i++){
    for(int j=0;h>1 && j<(h-1);j++){
      if (s[j*w+i] == '.' && s[j*w+i+w] == '.'){
        g.at(j*w+i).push_back(j*w+i+w);
        g.at(j*w+i+w).push_back(j*w+i);
      }
    }
  }
  for(int i=0;i<h*w;i++){
    vector<int> dist(h*w,-1);
    queue<int> que;
    dist[i] = 0;
    que.push(i);
    while (!que.empty()) {
      int v = que.front();
      que.pop();
      for (int nv : g[v]) {
        if (dist[nv] != -1) continue;
        dist[nv] = dist[v] + 1;
        que.push(nv);
      }
    }
    for(int j=0;j<h*w;j++)  ans = max(ans,dist[j]);
  }
  cout << ans << endl;
}
