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

using Lint=long long;
using P=pair<int,int>;
const int INF=1e9;

int dy[4]={-1,0,0,1};
int dx[4]={0,-1,1,0};

int main()
{
   int H,W; cin>>H>>W;
   vector<string> s(H);
   for(int i=0;i<H;i++) cin>>s[i];

   int ans=0;
   for(int i=0;i<H;i++) for(int j=0;j<W;j++) if(s[i][j]=='.'){
      vector<vector<int>> dist(H,vector<int>(W,INF));
      dist[i][j]=0;
      queue<P> Q; Q.push({i,j});
      while(!Q.empty()){
         int y,x;
         tie(y,x)=Q.front(); Q.pop();
         for(int k=0;k<4;k++){
            int ny=y+dy[k]; 
            int nx=x+dx[k];
            if(ny<0 or ny>=H or nx<0 or nx>=W or s[ny][nx]=='#') continue;
            if(dist[ny][nx]==INF){
               dist[ny][nx]=dist[y][x]+1;
               Q.push({ny,nx});
            }
         }
      }
      for(int y=0;y<H;y++) for(int x=0;x<W;x++) if(dist[y][x]<INF) ans=max(ans,dist[y][x]);
   }
   cout<<ans<<endl;
   return 0;
}
