#define _GLIBCXX_DEBUG
#define rep(i,n) for(int i=0;i<n;i++)
#include <bits/stdc++.h>
#include <numeric>
using namespace std;
typedef long long ll;
const int mod= 1e+9+7;

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

int main(){
  int H,W; cin>>H>>W;
  vector<vector<char>>a(H,vector<char>(W));
  rep(i,H){
      rep(j,W)cin>>a[i][j];
  }
  int mx=0;
  int ans=0;
  rep(i,H){
      rep(j,W){
          mx=0;
          vector<vector<int>>dist(H,vector<int>(W,-1));
          dist[i][j]=0;
          queue<pair<int,int>>q;
          q.push(make_pair(i,j));
          while(!q.empty()){
              ll y=q.front().first,x=q.front().second;
              q.pop();
              rep(k,4){
                  ll ny=y+dy[k],nx=x+dx[k];
                  if(ny<0||nx<0||ny>=H||nx>=W)continue;
                  if(a[ny][nx]=='#')continue;
                  if(dist[ny][nx]!=-1)continue;
                  q.push(make_pair(ny,nx));
                  dist[ny][nx]=dist[y][x]+1;
                  mx=max(dist[ny][nx],mx);
              }
          }
      }
      ans=max(max,mx);

  }
  cout<<ans<<endl;
}



