#include <bits/stdc++.h>
using namespace std;
#define modulo 1000000007
#define mod(mod_x) ((((long long)mod_x+modulo))%modulo)
#define Inf 10000000



int main(){
	
	int H,W;
	cin>>H>>W;
	
	vector<string> S(H);
	
	for(int i=0;i<H;i++){
		cin>>S[i];
	}
	
	vector<vector<int>> dp(H*W,vector<int>(H*W,Inf));
	
	for(int i=0;i<H;i++){
		for(int j=0;j<W;j++){
			int from = i*W+j;
			if(S[i][j]=='#')continue;
			dp[from][from] = 0;
			if(j!=0){
				if(S[i][j-1]=='.')dp[from][from-1] = 1;
			}
			
			if(j!=W-1){
				if(S[i][j+1]=='.')dp[from][from+1] = 1;
			}
			
			if(i!=0){
				if(S[i-1][j] == '.')dp[from][from-W]=1;
			}
			
			if(i!=H-1){
				if(S[i+1][j]=='.')dp[from][from+W]=1;
			}
		}
	}
	
	for(int i=0;i<H*W;i++){
		for(int j=0;j<H*W;j++){
			for(int k=0;k<H*W;k++){
				dp[j][k] = min(dp[j][k],dp[j][i] + dp[i][k]);
			}
		}
	}
	
	int ans = 0;
	
	for(int i=0;i<H*W;i++){
		for(int j=0;j<H*W;j++){
			if(dp[i][j]==Inf)continue;
			ans = max(ans,dp[i][j]);
		}
	}
	
	cout<<ans<<endl;
	
    return 0;
}
