#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

void print2d(vector<string> M){
    cout << endl;
    for(string s: M){
        cout << s << endl;
    }
}

int main(int argc, const char * argv[]) {
    
    while(true){
        int W, H;
        cin >> H >> W;
        if(W + H == 0){
            break;
        }
    
        // Map
        vector<string> M = vector<string>(H);
        
        for (int i=0; i<H; i++){
            cin >> M[i];
        }
        //print2d(M);
        
        // support map
        int S[H][W];
        for(int y=H-1; y>-1; y--){
            int cnt = 0;
            for(int x=W-1; x>-1; x--){
                if(M[y][x] == '.'){
                    cnt += 1;
                }else{
                    cnt = 0;
                }
                S[y][x] = cnt;
            }
        }
        
//        for(int y=0; y<H; y++){
//            cout << endl;
//            for(int x=0; x<W; x++){
//                cout << S[y][x];
//            }
//        }
        
        // solve
        int max_area = 0;
        for(int y=0; y<H; y++){
            for(int x=0; x<W; x++){
                if(M[y][x] == '.'){
                    int y_offset = 0;
                    int min_width = S[y][x];
                    while(y + y_offset < H && M[y + y_offset][x] == '.'){
                        if(S[y + y_offset][x] < min_width){
                            min_width = S[y + y_offset][x];
                        }
                        int area = min_width * (y_offset + 1);
                        if(area > max_area){
                            max_area = area;
                        }
                        
                        y_offset += 1;
                    }
                }
            }
        }
        cout << max_area << endl;
        
        
    }
    return 0;
}