#include <iostream>

using namespace std;

#define NMAX 110

char s[NMAX][NMAX], Void[0];
int n, m, v[NMAX][NMAX], maxim = -1;
inline int Maxim (int x, int y)
{
	if (x > y) return x;
	else return y;
}

void ReadData ()
{
	cin >> n >> m;
	cin.getline (Void, 0);
	for (int i = 1; i <= n; ++i)
	{
		for (int j = 1; j <= n; ++j)
			cin >> s[i][j];
		cin.getline (Void, 0);
	}
}

void Solve ()
{
	v[1][1] = 0;
	int a, b;
	for (int i = 1; i <= n; ++i)
	{
		for (int j = 1; j <= m; ++j)
		{
			if (s[i][j] == '&')
				v[i][j] = 0;
			else
			{
				if (i - 1 >= 1 && s[i - 1][j] == '.' && s[i][j] == '.')
					a = v[i - 1][j];
				else
					a = 0;
				if (j - 1 >= 1 && s[i][j - 1] == '.' && s[i][j] == '.')
					b = v[i][j - 1];
				else
					b = 0;
				v[i][j] = Maxim (a, b) + 1;
			}
			if (v[i][j] > maxim)
			{
				maxim = v[i][j];
			}
		}
	}
}

int main ()
{
	ReadData ();
	Solve ();
	cout << maxim;
	return 0;
}