#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <climits>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
#define ALL(A)		(A).begin(),(A).end()
#define DUMP(A)    cout<<#A<<"="<<(A)<< endl
#define SIZE(A)    (int)((A).size())
using namespace std;
typedef long long ll;

char ma[500][500];
int hist[500][500];

int main(){
    int H,W;
    for(;;){
        scanf("%d %d\n",&H,&W);
        if(H==0&&W==0) break;
        for(int i=0;i<H;i++){
            for(int j=0;j<W;j++){
                scanf("%c",&ma[i][j]);
            }
            scanf("\n");
        }
        for(int j=0;j<W;j++){
            int bef=0;
            for(int i=0;i<H;i++){
                if(ma[i][j]=='.') bef++;
                else bef=0;
                hist[i][j]=bef;
            }
        }
        int ret=0;
        for(int i=0;i<H;i++){
            stack<pair<int,int> > st;
            for(int j=0;j<W;j++){
                if(st.empty() || st.top().first< hist[i][j]){
                    st.push(make_pair(hist[i][j],j));
                }else if(st.top().first > hist[i][j]){
                    int lastpos;
                    while(!st.empty() && st.top().first > hist[i][j]){
                        ret=max(ret,st.top().first*(j-st.top().second));
                        lastpos=st.top().second;
                        st.pop();
                    }
                    if(st.empty() || st.top().first < hist[i][j]){
                        st.push(make_pair(hist[i][j],lastpos));
                    }
                }
            }
            while(!st.empty()){
                ret=max(ret,st.top().first*(W-st.top().second));
                st.pop();
            }
        }
        printf("%d\n",ret);
    }
}