#include<cstdio>
#include<queue>
using namespace std;
char mat[101][101];
int lmax[101][101];
int n,m;
queue <int> qx;
queue <int> qy;
int lee()
{
	int xn, yn;
	int x,y;
	if(mat[0][0]=='.')
	{
		lmax[0][0]=1;
		qx.push(0);
		qy.push(0);
	}
	while(!qx.empty())
	{
		x=qx.front();
		qx.pop();
		y=qy.front();
		qy.pop();
		xn=x+1;
		yn=y;
		if((xn<n)&&(mat[xn][yn]=='.')&&(lmax[xn][yn]<(lmax[x][y]+1)))
		{
			qx.push(xn);
			qy.push(yn);
			lmax[xn][yn]=lmax[x][y]+1;
		}
		xn=x;
		yn=y+1;
		if((yn<m)&&(mat[xn][yn]=='.')&&(lmax[xn][yn]<(lmax[x][y]+1)))
		{
			qx.push(xn);
			qy.push(yn);
			lmax[xn][yn]=lmax[x][y]+1;
		}
	}
}
int main()
{
	int i,j;
	int maxi=0;
	scanf("%d %d\n",&n,&m);
	for(i=0;i<n;i++)
		scanf("%s",mat[i]);
	lee();
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
			if(lmax[i][j]>maxi)
				maxi=lmax[i][j];
	printf("%d\n",maxi);
	return 0;
}