#include<stdio.h>
#include<cstring>
#include<algorithm>
using namespace std;

int dx[4]={1,0,-1,0},
	dy[4]={0,1,0,-1};
int n,m,i,j,ans,vis[30][30],q[1000][3];
char s[30][30];

int fast(){
	int res=0,fl=1;
	char c=getchar();
	while(c<48||c>57){
		if(c=='-')fl=-1;
		c=getchar();
	}while(c>=48&&c<=57)res=res*10+c-48,c=getchar();
	return res*fl;
}

void write(int x){
	if(x>9)write(x/10);
	putchar(x%10+48);
}

void bfs(int x,int y){
	memset(vis,0,sizeof(vis));
	q[1][0]=x,q[1][1]=y,q[1][2]=0;
	vis[x][y]=1;
	int l=1,r=1;
	while(l<=r){
		for(int i=0;i<4;i++){
			int sx=q[l][0]+dx[i],sy=q[l][1]+dy[i];
			if(sx>=0&&sx<n&&sy>=0&&sy<m&&s[sx][sy]=='.'&&vis[sx][sy]==0){
				q[++r][0]=sx,q[r][1]=sy,q[r][2]=q[l][2]+1;
				vis[sx][sy]=1;
			}
		}l++;
	}ans=max(ans,q[r][2]);
}

int main(){
	scanf("%d%d",&n,&m);
	for(i=0;i<n;i++)
		scanf("%s",s[i]);
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
			if(s[i][j]=='.')bfs(i,j);
	printf("%d",ans);
	return 0;
}