#include <iostream>
#include <vector>
#include <string>
using namespace std;

int dp[410][410];

int main() {
	int H, W;
	cin >> H >> W;
	vector<string> S(H);
	for(int i=0; i<H; ++i) cin >> S[i];
	for(int i=0; i<H*W; ++i){
		for(int j=0; j<H*W; ++j){
			if(i==j) dp[i][j]=0;
			else if(S[i/W][i%W]=='.' && S[j/W][j%W]=='.'){
				if(i/W==j/W && abs(i%W-j%W)==1) dp[i][j]=1;
				else if(i%W==j%W && abs(i/W-j/W)==1) dp[i][j]=1;
				else dp[i][j]=1000;
			}
			else dp[i][j]=1000;
		}
	}
	for(int k=0; k<H*W; ++k){
		for(int i=0; i<H*W; ++i){
			for(int j=0; j<H*W; ++j){
				dp[i][j]=min(dp[i][j], dp[i][k]+dp[k][j]);
			}
		}
	}
	int ans=0;
	for(int i=0; i<H*W; ++i){
		for(int j=0; j<H*W; ++j){
			if(dp[i][j]<1000){
				ans=max(ans, dp[i][j]);
			}
		}
	}
	cout << ans << endl;
	return 0;
}