#define _USE_MATH_DEFINES
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string>
#include<iostream>
#include<cctype>
#include<cstdio>
#include<vector>
#include<stack>
#include<queue>
#include <algorithm>
#include<math.h>
#include<set>
#include<map>
#include<iomanip>

//#include<bits/stdc++.h>


using namespace std;


//int rx[505][505] = {};
		int ry[505][505] ;
		//int sx[505][505] = {};
		//int sy[505][505] = {};
int main() {

	int a, b;
	while (1) {
		cin >> a >> b; if (!a && !b)break;
		string p[505];
		for (int i = 0; i < a; i++)
			cin >> p[i];        
		for (int i = 0; i < a + 3; i++) {
			for (int j = 0; j < b + 3; j++)
				ry[i][j] = 0;
		}
		
		for (int i = 0; i < b; i++) {
			for (int j = a-1; j >=0; j--) {
				if (p[j][i] == '.') {
				//	cout << "#";
					ry[j][i]++;
					if (j&&p[j - 1][i] == p[j][i])ry[j - 1][i]+=ry[j][i];
				}
			//	cout << endl;
			//	cout << "#";
			}

		}
		int m = 0;
		for (int i = 0; i < a; i++) {
			vector<int>h;
			bool f[505] = {};
			for (int k = 0; k < b; k++) {
		//		cout << ry[i][k] << endl;
				if(ry[i][k]&&!f[ry[i][k]])h.push_back(ry[i][k]);
					f[ry[i][k]] = 1;
			}
			int T = 0,R=0;
		//	cout << h.size();
			for (T = 0; T < h.size(); T++) {
			//while(h.size()>=T){
				int W = 0;
				int n=h[T];
				R = 0;
			//	cout << n;
				for (int j = 0; j < b; j++) {
					R++;
				//	cout << n << " " << R<<" ";
					if (ry[i][j] < n)R = 0;
					m = max(m, R*n);
					
				//	cout << m << endl;
				}
				//cout << T;
				//T++;
			}
		}
		cout << m << endl;


	}


	return 0;

}