#include<bits/stdc++.h>
using namespace std;
int n,m,sum[30][30],max1,tail;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
char ch[30][30];
struct hzy{
	int x,y;
}q[1001];
void bfs(int x,int y){
	memset(sum,-1,sizeof(sum));
	sum[x][y]=0;
	tail=1;
	q[1].x=x;
	q[1].y=y;
	for(int i=1;i<=tail;i++){
		int xx=q[i].x;
		int yy=q[i].y;
		for(int j=0;j<4;j++){
			int xxx=xx+dx[j];
			int yyy=yy+dy[j];
//			cout<<xxx<<' '<<yyy<<endl;
			
			if(xxx>=1&&yyy>=1&&xxx<=n&&yyy<=m&&sum[xxx][yyy]<0&&ch[xxx][yyy]=='.'){
//				cout<<xxx<<' '<<yyy<<endl;
		
				sum[xxx][yyy]=sum[xx][yy]+1;
				max1=max(max1,sum[xxx][yyy]);
				q[++tail].x=xxx;
				q[tail].y=yyy;
			}
		}
	}
//	for(int i=0;i<=n;i++){
//		for(int j=0;j<=m;j++){
//			cout<<sum[i][j]<<' ';
//		}
//		cout<<endl;
//	}
//	cout<<tail<<endl;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>ch[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(ch[i][j]=='.'){
				bfs(i,j);
			}
		}
	}
	cout<<max1;
	return 0;
}
