#define _USE_MATH_DEFINES
#include <iostream>
#include <sstream>
#include <cmath>
#include <algorithm>
#include <queue>
#include <stack>
#include <limits>
#include <map>
#include <string>
#include <cstring>
#include <set>
#include <deque>

using namespace std;

typedef long long ll;
typedef pair<double,double> P;

//space:0 obstacle:1
int str2bit(string str){
	int res= (1 << str.size()) - 1;
	//for(int i=0;i<str.size();i++){
	for(int i=str.size()-1,j=0;i>=0;i--,j++){
		if(str[i]=='.') res &= ~(1 << i);
	}
	return res;
}

string bit2str(int n,int w){
	string res="";

	while(w>0){
		res += n & 1 ? '*' : '.';
		n >>= 1;
		w--;
	}
	return res;
}

int main(){
	string str;
	while(getline(cin,str)){
		int w,h;
		sscanf(str.c_str(),"%d %d",&h,&w);
		if(w==h && w==0) break;

		int* stage = new int[h];

		vector<string> tmp;
		for(int i=0;i<h;i++){
			getline(cin,str);
			int bit = str2bit(str);
			stage[i] = bit;
			tmp.push_back(str);
		}
/*
		for(int i=0;i<h;i++){
			cout << bit2str(stage[i],w) << endl;
		}
*/
		int sum=0;


		for(int lenh=h;lenh>=1;lenh--){
			for(int lenw=w;lenw>=1;lenw--){
				if(lenh*lenw <= sum) continue;
				for(int x=0;x+lenw-1<w;x++){
					int bit = (1 << lenw) - 1;
					bit <<= x;

					
					for(int y=0;y+lenh-1<h;y++){
						bool isok = true;
						for(int i=y,j=0;j<lenh;i++,j++){
							//stage...space:0 obstacle:1

							//string str1 = bit2str(stage[y],w);
							//string str2 = bit2str(bit,w);
							//printf("x:%d y:%d lenw:%d lenh:%d\n",x,y,lenw,lenh);
							//printf("stage: %s\n",str1.c_str());
							//printf("bit: %s\n",str2.c_str());
							//printf("opr: %d\n",(stage[y] >> x) & bit);
							if(stage[i] & bit){
								isok=false;
								break;
							}
						}
						if(isok){
							//printf("x:%d y:%d lenw:%d lenh:%d\n",x,y,lenw,lenh);
							sum=max(sum,lenw*lenh);
							goto next;
						}

					}

				}
next:;
			}
		}
		cout << sum << endl;
	}

}