#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
int n,m;
int l[]={-1,0,1,0};
int r[]={0,-1,0,1};
int dfs(int i,int j,char v[][24] ){
	    if(v[i][j]=='#')
	    return 0;
    queue<pair<int,int>>q;
     int  dp[n+1][m+1],a[n][m];
      for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            dp[i][j]=-1; a[i][j]=0;
        }
      }
 
    int ans=0;
    q.push(make_pair(i,j));
    dp[i][j]=0;
    pair<int,int>t;
     while(!q.empty()){
         t=q.front();
        q.pop();
        a[t.x][t.y]=1;
      
 
 
        for(int k=0; k<4; k++){

              if( (t.x+l[k]>=0 && t.x+l[k]<n) && (t.y+r[k]>=0 && t.y+r[k]<m) ){
                       // cout<<t.x+l[k]<<" "<<t.y+r[k]<< " "<<a[t.x+l[k]][t.y+r[k]]<< " "<<v[t.x+l[k]][t.y+r[k]]<<" "<<endl;
                 if(  a[t.x+l[k]][t.y+r[k]]==0 && v[t.x+l[k]][t.y+r[k]]=='.'){
                       //             cout<<t.x+l[k]<<" "<<t.y+r[k]<< " "<<a[t.x+l[k]][t.y+r[k]]<< " "<<v[t.x+l[k]][t.y+r[k]]<<" "<<endl;
                     dp[t.x+l[k]][t.y+r[k]]=dp[t.x][t.y]+1;
                    // cout<<dp[t.x+l[k]][t.y+r[k]]<<" ";
                     ans=max(ans, dp[t.x+l[k]][t.y+r[k]]);
                    q.push(make_pair(t.x+l[k],t.y+r[k]));
 
                 }
 
              }
 
        }
        }
     //cout<<ans<<" ";
  return ans;
}
int main(){
 
         cin>>n>>m;
         char v[21][21];
         for(int i=0; i<n; i++)
           {
               for(int j=0; j<m; j++){
                cin>>v[i][j];
               }
 
           }
         int ans=0;
         for(int i=0; i<n; i++){
 
            for(int j=0; j<m;j++){
          
            ans=max(ans,dfs(i,j,v));
         }}
         cout<<ans;
}