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

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

string mp[25];
int h,w;
int dist[25][25];
int ans=0;

void chk(int sy, int sx) {
  if(mp[sy][sx]=='#')return;

  for(int i=0;i<25;i++)
    for(int j=0;j<25;j++)
      dist[i][j]=-1;
  dist[sy][sx]=0;

  queue<pair<int, int> > q;
  q.push({sy, sx});
  while(!q.empty()){
    auto v = q.front();q.pop();
    int y = v.first;
    int x = v.second;
    for(int i=0;i<4;i++){
      int ny = y + dy[i];
      int nx = x + dx[i];
      if(0<=ny&&ny<h&&0<=nx&&nx<w && mp[ny][nx]=='.' && dist[ny][nx]==-1){
        dist[ny][nx] = dist[y][x]+1;
        ans = max(ans, dist[ny][nx]);
        q.push({ny, nx});
      }
    }
  }
}

int main(int argc, char *argv[]) {
  ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);

  cin>>h>>w;
  for(int y=0;y<h;y++)cin>>mp[y];

  for(int y=0;y<h;y++){
    for(int x=0;x<w;x++){
      chk(y, x);
    }
  }

  cout<<ans<<endl;
  
  return 0;
}