#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int main(){

	int h,w;
	char field[501][501];
	while(cin>>h>>w&&!(h==0&&w==0)){
		for(int i = 0; i < h; i++)
			for(int j = 0; j < w; j++)
				cin>>field[i][j];
		int yokoEmp[501][501];
		for(int i= 0; i < 501; i++)
			fill(yokoEmp[i],yokoEmp[i]+501,-1);
		for(int i = 0; i < h; i++){
			int maxCnt=-1;
			int cnt=0;
			for(int j = w-1; j >=0; j--){
				if(field[i][j]=='*'){
					//cnt=0;
					//maxCnt=max(maxCnt,cnt);
					//continue;
					cnt=0;
				}
				else{
					yokoEmp[i][j]=cnt;
					cnt++;
					//yokoEmp[i][j]=cnt;
					//maxCnt=max(maxCnt,cnt);
					//cnt++;
				}
			}
			//for(int j = 0; j < w; j++){
			//	if(yokoEmp[i][j]!=-1){
			//		yokoEmp[i][j]=maxCnt-yokoEmp[i][j];
			//	}
			//}
		}
		int maxS=0;
		for(int i = 0; i < h; i++){
			if(maxS>=(h-i)*w){
				break;
			}
			for(int j = 0; j < w; j++){
				if(field[i][j]=='*'){
					continue;
				}
				else{
					int idx;
					int minSize=10000000;
					for(int k = 0; i + k < h; k++){
						if(field[i+k][j]=='*'){
							idx=i+k-1;
							break;
						}
						else if(i+k==h-1){
							minSize=min(minSize,yokoEmp[i+k][j]);
							idx=i+k;
							break;
						}
						else{
							minSize=min(minSize,yokoEmp[i+k][j]);
						}
						maxS=max(maxS,(minSize+1)*(k+1));
					}
					maxS=max(maxS,(minSize+1)*(idx-i+1));
				}
			}
		}
		cout<<maxS<<endl;
	}

	return 0;
}