#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>
#include <cassert>
 
using namespace std;
 
#define REP(i,s,e) for(int i=(s); i<(int)(e); i++)
#define rep(i,n) REP(i, 0, n)
#define pb push_back
#define mp make_pair
#define all(r) (r).begin(),(r).end()
#define rall(r) (r).rbegin(),(r).rend()
#define fi first
#define se second
#define DBG(X) cout<<" "<<#X<<" : "<<X<<endl
 
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<int, int> pii;

const int INF = 1e9;
const double EPS = 1e-8;
const int mod = 1e9 + 7;
const ll LINF = 1e18;

struct Input
{
	int n;char c;char str[1024];string s;ll l;
	int nextInt(){scanf("%d", &n);return n;}
	ll nextLong(){scanf("%lld", &l);return l;}
	char nextChar(){scanf("%c", &c);return c;}
	string next(){scanf("%s", str);return string(str);}
	string nextLine(){getline(cin, s);return s;}
};
Input in;


string s[510];

int d[510][510];

int main(){
	while(1){
		int h = in.nextInt(), w = in.nextInt();
		if(h == 0 && w == 0) break;
		rep(i, h) s[i] = in.next();
		rep(i, h) rep(j, w) d[i][j] = 0;
		rep(i, w) d[h-1][i] = s[h-1][i] == '.' ? 1: 0;
		for(int i = h - 2; i >= 0; i--){
			rep(j, w) d[i][j] = (s[i][j] == '.' ? d[i + 1][j] + 1 : 0);
		}
		int ans = 0;
		rep(i, h) rep(j, w){
			int tmp = INF;
			for(int k = j; k < w; k++){
				if(d[i][k] == 0) break;
				tmp = min(tmp, d[i][k]);
				ans = max(ans, tmp * (k - j + 1));
			}
		}
		printf("%d\n", ans);
	}
}