#include <stdio.h>

int n, m;
int dist[105][105];
char s[105][105];

inline int max (int a, int b) {return a > b ? a : b;}

void dfs (int x, int y)
{
	if (s[x][y] != '.')
		return;
	
	dist[x + 1][y] = dist[x][y + 1] = dist[x][y] + 1;
	dfs (x + 1, y);
	dfs (x, y + 1);
}

int main ()
{
//	freopen ("run.in", "r", stdin);
//	freopen ("run.out", "w", stdout);
	
	scanf ("%d %d\n", &n, &m);
	
	int i, j;
	
	for (i = 1; i <= n; i ++)
		gets (s[i] + 1);
	
	dist[1][1] = 1;
	dfs (1, 1);
	int sol = 0;
	for (i = 1; i <= n; i ++)
		for (j = 1; j <= m; j ++)
			if (s[i][j] == '.' && dist[i][j] > sol)
				sol = dist[i][j];
	printf ("%d\n", sol);
	return 0;
}