#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cfloat>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
#include <numeric>
#include <string.h>
#include <cassert>
 
#ifdef _DEBUG
#define typeof(X) std::identity<decltype(X)>::type //C++0x (for vs2010)
#else
#define typeof(X) __typeof__(X) // for gcc
#endif
 
#define sz(a)  int((a).size())
#define FOREACH(it, c) for (typeof((c).begin()) it=(c).begin(); it != (c).end(); ++it)
#define FOR(i,count) for (int i = 0; i < (count); i++)
 
using namespace std;
typedef long long ll;
const int MODULO = 1000000007;
 
typedef pair<int,int> Pii;
// begin

int h,w;
char s[1000][1001];
int t[1001][1001];
 
int solve(){
    memset(t,0,sizeof(t));
    for(int i =0 ; i < h; i++){
		int cnt = 0;
		cin>>s[i];
		for (int j = w - 1; j >= 0 ; j--){
			if(s[i][j] == '.'){
				t[i][j] = ++cnt;
			}else{
				t[i][j] = cnt = 0;
			}
		}
    }
 
    int ans = 0;
    for (int i = 0; i < h; i++){
        for (int j = 0; j < w; j++){
			int w = INT_MAX;
			for(int k = 0; i + k < h && s[i + k][j] == '.'; k++){
				w = min(w,t[i+k][j]);
				ans = max(ans,(k + 1) * w);
			}
        }
    }
    return ans;
}
 
int main(){
    while(cin>>h>>w,(h||w)){
        cout << solve() << endl;
    }
    return 0;
}