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

const int N=25;

int n,m,ans,dp[N][N];
char a[N][N];
bool vis[N][N];
int dx[]={ 0, 0,+1,-1};
int dy[]={+1,-1, 0, 0};

void init()
{
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			vis[i][j]=false;
}

bool invalid(int x,int y)
{
	return min(x,y)<0 or x>=n or y>=m or vis[x][y] or a[x][y]=='#';
}

void add(queue <pair <int,int>> &q,int x,int y,int val)
{
	q.push({x,y});
	dp[x][y]=val;
	vis[x][y]=true;
}

void go(int x,int y)
{
	queue <pair <int,int>> q;

	add(q,x,y,0);
	while(not q.empty())
	{
		auto p=q.front();
		q.pop();

		int x=p.first,y=p.second;
		ans=max(ans,dp[x][y]);
		for(int k=0;k<4;k++)
		{
			int nx=x+dx[k],ny=y+dy[k];
			if(invalid(nx,ny)) continue;
			add(q,nx,ny,dp[x][y]+1);
		}
	}
}


int main()
{
	scanf("%d%d",&n,&m);
	for(int i=0;i<n;i++) scanf(" %s",a[i]);

	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			if(a[i][j]=='#') continue;
			init();
			go(i,j);
		}
	}

	printf("%d",ans);
}