/*
	AOJ_0116: Rectangular Searching
*/
#include	<iostream>
#include	<algorithm>

using namespace std;

int main(void) {
	short Maps[500][500];
	char buff;
	int H, W, m, result;

	while (1) {
		result = 0;
		cin >> H >> W;
		if (H == 0 && W == 0) { break; }

		for (int i = 0; i < W; i++) {
			for (int j = 0; j < H; j++) {
				cin >> buff;
				if (buff == '*') { Maps[i][j] = 0; }
				else {
					if (i == 0) { Maps[i][j] = 1; }
					else { Maps[i][j] = Maps[i - 1][j] + 1; }
				}
			}
		}
		for (int i = 0; i < W; i++) {
			for (int j = 0; j < H; j++) {
				cout << Maps[i][j] << ' ';
			}
			cout << endl;
		}
		for (int j = 0; j < H; j++) {
			for (int i = 0; i < W; i++) {
				if (Maps[i][j] == 0) { continue; }
				m = 250001;
				for (int k = j; k < W; k++) {
					m = min(m, (int)Maps[i][k]);
					if (m == 0) { break; }
					result = max(result, (k-j+1)*m);
				}
			}
		}
		cout << result << endl;
	}
	return 0;
}