#include <bits/stdc++.h>
using namespace std;
 
typedef pair<int, int> P;
 
bool m[21][21];
int a[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
 
int main(){
  int h, w;
  cin >> h >> w;
  for(int i=0; i<h; i++){
    for(int j=0; j<w; j++){
      char c; cin >> c;
      if(c=='.') m[i][j]=true;
    }
  }
  int bmax=0;
  for(int i=0; i<h; i++){
    for(int j=0; j<w; j++){
      if(!m[i][j]) continue;
      int dist[h][w];
      fill((int*)dist,(int*)(dist+h),-1);
      dist[i][j] = 0;
      queue<P> que;
      que.push(P(i,j));
      while(!que.empty()){
        P p = que.front(); que.pop();
        for(int k=0; k<4; k++){
          int dx=a[k][0],dy=a[k][1];
          int x = p.first+dx, y=p.second+dy;
          if(0<=x&&x<h&&0<=y&&y<w&&dist[x][y]<0&&m[x][y]){
            dist[x][y]=dist[p.first][p.second]+1;
            que.push(P(x,y));
            bmax = max(bmax,dist[x][y]);
          }
        }
      }
    }
  }
  cout << bmax << endl;
  return 0;
}