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

int d[35][35];
template<typename T>
void chmax(T &a,T b){
  if(a<b)a=b;
}
int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};
typedef pair<int,int> P;

signed 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]=='#')continue;
      memset(d,-1,sizeof(d));
      d[i][j]=0;
      queue<P> que;
      que.push(P(i,j));
      while(que.size()){
        P p=que.front();que.pop();
        for(int k=0;k<4;k++){
          int x=p.first+dx[k],y=p.second+dy[k];
          if(x<0||x>=h||y<0||y>=w||~d[x][y]||s[x][y]=='#')continue;
          d[x][y]=d[p.first][p.second]+1;
          chmax(ans,d[x][y]);
          que.push(P(x,y));
        }
      }
    }
  }
  cout<<ans<<endl;
}
