#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <list>
#include <iostream>
#include <climits>
#include <cfloat>

typedef long long ll;

using namespace std;

struct Rect { int w; int h; };

char buf[512];
Rect memo[512][512];
Rect rectMemo[512][512];
int main()
{
	while (true)
	{
		int H, W;
		cin.getline(buf, sizeof(buf));
		sscanf(buf, "%d %d", &H, &W);
		if (H == 0 && W == 0)
			break;

		memset(memo, 0, sizeof(memo));
		memset(rectMemo, 0, sizeof(rectMemo));
		int ans = 0;
		for (int i = 1; i <= H; ++i)
		{
			cin.getline(buf, sizeof(buf));
			for (int j = 1; j <= W; ++j)
			{
				if (buf[j-1] == '.')
				{
					memo[i][j].h = memo[i-1][j].h + 1;
					memo[i][j].w = memo[i][j-1].w + 1;
					rectMemo[i][j].h = min(rectMemo[i-1][j-1].h + 1, memo[i][j].h);
					rectMemo[i][j].w = min(rectMemo[i-1][j-1].w + 1, memo[i][j].w);
					ans = max(ans, max(rectMemo[i][j].h*rectMemo[i][j].w, max(memo[i][j].h, memo[i][j].w)));
				}
				else
					memo[i][j].h = memo[i][j].w = rectMemo[i][j].h = rectMemo[i][j].w = 0;
			}
		}
		printf("%d\n", ans);
	}

	return 0;
}