#include <bits/stdc++.h>
using namespace std;

int main() {
    int h, w, len[505][505]; // (i,j)より上に.が連続していくつあるか
    int L[505], R[505]; // L[i]=len[j-1]<len[i](j<=i)となる最大のj, R[i]=len[i]>len[j](i<j)となる最小のj
    string s[505];
    while(cin >> h >> w, h){
        for(int i=0;i<h;i++) cin >> s[i];
        for(int i=0;i<=h;i++) fill(len[i], len[i]+w+1, 0);
        // len
        for(int i=0;i<h;i++){
            for(int j=0;j<w;j++){
                if(s[i][j] == '.'){
                    len[i+1][j] = len[i][j]+1;
                }
            }
        }
        int ans = 0;
        stack<int> st;
        for(int i=1;i<=h;i++){
            // L
            while(!st.empty())st.pop();
            for(int j=0;j<=w;j++){
                while(!st.empty() && len[i][j] <= len[i][st.top()]){
                    st.pop();
                }
                if(st.empty()) L[j] = 0;
                else L[j] = st.top()+1;
                st.push(j);
            }
            while(!st.empty())st.pop();
            // R
            for(int j=w;j>=0;j--){
                while(!st.empty() && len[i][j] <= len[i][st.top()]){
                    st.pop();
                }
                if(st.empty()) R[j] = w;
                else R[j] = st.top();
                st.push(j);
            }
            // 面積計算
            for(int j=0;j<w;j++){
                ans = max(ans, len[i][j]*(R[j]-L[j]));
            }
        }
        cout << ans << endl;
    }
    return 0;
}
