#include <iostream>
#include <stack>
using namespace std;
#define rep(i,n) for(int i=0;i<n;i++)

int W,H;

struct RECT{int height,pos;};

int solve(int data[]){
	int ret = 0;
	data[W] = 0;
	RECT t;
	stack<RECT> S;
	for(int i=0;i<=W;i++){
		t.height = data[i];
		t.pos = i;
		if(S.empty()){
			S.push(t);
		}else{
			if(data[i] > S.top().height){
				S.push(t);
			}else if(data[i] < S.top().height){
				int here = i-1;
				while( !S.empty() && S.top().height > data[i]){
					RECT s = S.top(); S.pop();
					t.pos = s.pos;
					int width = here-s.pos+1;
					ret = max(ret,width*s.height);
				}
				S.push(t);
			}
		}
	}
	
	return ret;
}

int main(){
	while(cin >> H >> W, H){
		string s;
		getline(cin,s);
		int ret = 0;
		
		int dp[501][501]={{0}};
		for(int i=1;i<=H;i++){
			getline(cin,s);
			rep(j,s.length()){
				if(s[j] == '.')dp[i][j] = dp[i-1][j] + 1;
			}
		}
		for(int i=1;i<=H;i++){
			ret = max(solve(dp[i]),ret);
		}
		cout << ret << endl;
	}

}