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

char fi[25][25];
int h,w;

int p[4] = {1,0,-1,0};
int q[4] = {0,1,0,-1};

int fh(int x, int y){
	return x*w + y;
}

int apsp[405][405];

int main(){
	scanf("%d%d",&h,&w);
	for(int i=0;i<h;i++){
		scanf("%s",fi[i]);
	}
	
	for(int i=0;i<h*w;i++){
		for(int j=0;j<h*w;j++){
			if(i==j) apsp[i][j] = 0;
			else apsp[i][j] = 1e9;
		}
	}
	
	for(int i=0;i<h;i++){
		for(int j=0;j<w;j++){
			if(fi[i][j] == '#') continue;
			int dari = fh(i,j);
			for(int k=0;k<4;k++){
				int ti = i+p[k];
				int tj = j+q[k];
				if(ti < 0 || ti >= h || tj < 0 || tj >= w || fi[ti][tj] == '#') continue;
				int ke = fh(ti,tj);
				apsp[dari][ke] = 1;
			}
		}
	}
	for(int k=0;k<h*w;k++){
		for(int i=0;i<h*w;i++){
			for(int j=0;j<h*w;j++){
				apsp[i][j] = min(apsp[i][j],apsp[i][k] + apsp[k][j]);
			}
		}
	}
	
	int ans = 0;
	
	for(int i=0;i<h*w;i++){
		for(int j=0;j<h*w;j++){
			if(apsp[i][j] == 1e9) continue;
			ans = max(ans,apsp[i][j]);
		}
	}
	
	printf("%d\n",ans);
	
	return 0;
}
