#include <stdio.h>
#include <vector>
#include <algorithm>
#include <math.h>
#include <stack>

using namespace std;

struct Info{
	Info(){ left = height = 0;}
	Info(int arg_left,int arg_height){
		left = arg_left;
		height = arg_height;
	}
	int left,height;
};

int main(){

	int H,W,max_s,tmp,tmp_h;

	int** table = new int*[501];
	char** data = new char*[501];
	for(int i = 0; i < 501; i++){
		table[i] = new int[501];
		data[i] = new char[501];
	}

	stack<Info> S;
	Info work;

	while(true){
		scanf("%d %d",&H,&W);
		if(H == 0 && W == 0)break;

		for(int i = 0; i < W+1; i++)table[0][i] = 0;
		for(int i = 0; i < H+1; i++)table[i][W] = 0;

		max_s = 0;

		for(int i = 1; i <= H; i++){
			scanf("%s",data[i]);

			for(int k = 0; k < W; k++){
				if(data[i][k] == '.'){
					table[i][k] = table[i-1][k] + 1;
				}else{
					table[i][k] = 0;
				}
			}

			tmp_h = table[i][0];
			S.push(Info(0,tmp_h));

			for(int k = 1; k < W+1; k++){
				if(table[i][k] > tmp_h){
					S.push(Info(k,table[i][k]));
					tmp_h = table[i][k];
				}else if(table[i][k] == tmp_h){
					//Do nothing
				}else{
					while(S.empty() == false && S.top().height >= table[i][k]){
						work = S.top();
						S.pop();
						tmp = (k - work.left)*work.height;
						max_s = (max_s >= tmp)?max_s:tmp;
					}
					tmp_h = table[i][k];
					S.push(Info(work.left,table[i][k]));
				}
			}
		}
		while(!S.empty())S.pop();

		printf("%d\n",max_s);
	}
	return 0;
}