#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
#include <utility>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <functional>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
 
using namespace std;
 
#define rep(i,n) for(int i=0; i<(int)(n); i++)
#define repc(i,s,e) for(int i=(s); i<(int)(e); i++)
#define pb push_back
#define mp make_pair
#define all(r) r.begin(),r.end()
#define fi first
#define se second
 
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vii;
typedef vector<ll> vl;
typedef vector<vl> vll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

typedef pair<int, pii> pip;
 
 
 
const int INF = 1000000;
const double EPS = 1e-8;
const int mod = 1e9 + 7;

int d[510][510];
pii p[510][510];

int main(){
	int h, w;
	vector<string> s(501);
	while(cin>>h>>w){
		if(h == 0 && w == 0) break;
		rep(i, h) cin>>s[i];
		memset(d, 0, sizeof(d));
		rep(i, 510) rep(j, 510) p[i][j].fi = 0, p[i][j].se = 0;
		rep(i, h) rep(j, w){
			d[i+1][j+1] = (s[i][j] == '*'?0:1);
		}
		int ans = 0;
		for(int i = 1; i <= h; i++){
			for(int  j = 1; j <= w; j++){
				p[i][j].fi = p[i][j].se = d[i][j];
				if(d[i][j] != 0){
					p[i][j].fi = min(j==1?INF:p[i-1][j-1].fi, p[i-1][j].fi)+1;
					p[i][j].se = min(i==1?INF:p[i-1][j-1].se, p[i][j-1].se)+1;
				}
				ans = max(ans, p[i][j].fi*p[i][j].se);
				//printf(" (%d, %d)", p[i][j].fi, p[i][j].se);
			}
			//cout<<endl;
		}
		cout<<ans<<endl;
	}

}