#include<bits/stdc++.h>
using namespace std;
struct node
{
	int x,y,sum;
}p;
int n,m,b[23][23],ans,nx,ny,px,py;
int b1[5]={0,0,1,-1},b2[5]={1,-1,0,0};
char a[30][30];
queue<node>q;
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>a[i][j];
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(a[i][j]=='.')
			{
				memset(b,0,sizeof(b));
				b[i][j]=1,p.x=i,p.y=j,p.sum=0;
				q.push(p);
				while(!q.empty())
				{
					p=q.front(),q.pop(),nx=p.x,ny=p.y;
					for(int i=0;i<4;i++)
						if(b[nx+b1[i]][ny+b2[i]]==0&&a[nx+b1[i]][ny+b2[i]]=='.')
						{
							px=nx+b1[i],py=ny+b2[i],b[px][py]=1;
							node txt;
							txt.x=px,txt.y=py,txt.sum=p.sum+1,ans=max(ans,txt.sum);
							q.push(txt);
						}
				}
			}
	cout<<ans;
	return 0;
}
