#include<bits/stdc++.h>
using namespace std;
int main(){
  int h,w;
  cin>>h>>w;
  vector<string> s(h);
  for(int i=0;i<h;i++)
    cin>>s.at(i);
  int m=0;
  vector<int> my={-1,1,0,0};
  vector<int> mx={0,0,-1,1};
  for(int i=0;i<h;i++){
    for(int j=0;j<w;j++){
      if(s.at(i).at(j)=='#')
        continue;
      vector<vector<int>> l(h,vector<int>(w,h*w));
      queue<vector<int>> q;
      int ml=0;
      l[i][j]=0;
      q.push({i,j,0});
      while(!q.empty()){
        auto a=q.front();
        q.pop();
        int ay=a.at(0);
        int ax=a.at(1);
        int al=a.at(2);
        for(int p=0;p<4;p++){
          int by=min(max(ay+my.at(p),0),h-1);
          int bx=min(max(ax+mx.at(p),0),w-1);
          if(s.at(by).at(bx)=='.'&&l.at(by).at(bx)>al+1){
            l.at(by).at(bx)=al+1;
            q.push({by,bx,al+1});
            ml=max(ml,al+1);
          }
        }
      }
      m=max(m,ml);
    }
  }
  cout<<m<<endl;
}