#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<cassert>
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<queue>
#include<set>
#include<map>
#include<utility>
#include<numeric>
#include<algorithm>
#include<bitset>
#include<complex>

using namespace std;

typedef long long Int;
typedef vector<int> vint;
typedef pair<int,int> pint;
#define mp make_pair

template<class T> void pv(T a, T b) { for (T i = a; i != b; ++i) cout << *i << " "; cout << endl; }
template<class T> void chmin(T &t, T f) { if (t > f) t = f; }
template<class T> void chmax(T &t, T f) { if (t < f) t = f; }
int in() { int x; scanf("%d", &x); return x; }

int m[510][510][2];
char s[510][510];

int main() {
	int h,w;
	while(h=in(),w=in()){
		int i;
		for(i=0;i<h;i++){
			scanf("%s",s[i]);
		}
		int mx=0;
		memset(m,0,sizeof(m));
		if(s[0][0]=='.')m[0][0][0]=1;
		else m[0][0][0]=0;
		chmax(mx,m[0][0][0]);
		for(i=1;i<w;i++){
			if(s[0][i]=='.')m[i][0][0]=m[i-1][0][0]+1;
			else m[i][0][0]=0;
			chmax(mx,m[i][0][0]);
		}
		int j,k;
		for(i=1;i<h;i++){
			if(s[i][0]=='.')m[0][0][1]=1;
			else m[0][0][1]=0;
			for(j=1;j<w;j++){
				if(s[i][j]=='.'){
					m[j][0][1]=m[j-1][0][1]+1;
					for(k=1;k<h&&k<w;k++){
						m[j][k][1]=min(m[j][0][1],m[j][k-1][0]);
						if(m[j][k][1]==0)break;
					}
				}
				else m[j][0][1]=0;
				for(k=0;k<h&&k<w;k++){
					m[j][k][0]=m[j][k][1];
					if(m[j][k][0]==0)break;
					chmax(mx,m[j][k][0]*(k+1));
				}
			}
		}
		cout<<mx<<endl;
	}
	return 0;
}