#include <iostream>
#include <stack>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <vector>

#define rep(x,to) for(int x=0;x<to;x++)
#define rep2(x,from,to) for(int x=from;x<to;x++)

using namespace std;

struct Rectangle{ int height;  int pos; };

int getLargestRectangle( int w, vector<int> buffer){
//int getLargestRectangle( int w, int buffer[]){
    stack<Rectangle> S;
    int maxv = 0;
    buffer[w] = 0;
    
    for ( int i = 0; i <= w; i++ ){
        Rectangle rect;
        rect.height = buffer[i];
        rect.pos = i;
        if ( S.empty() ){
            S.push( rect );
        } else {
            if ( S.top().height < rect.height ){
                S.push( rect );
            } else if ( S.top().height > rect.height ) {
                int target = i;
                while ( !S.empty() && S.top().height >= rect.height){
                    Rectangle pre = S.top(); S.pop();
                    int area = pre.height * (i - pre.pos);
                    maxv = max( maxv, area);
                    target = pre.pos;
                }
                rect.pos = target;
                S.push(rect);
            }
        }
    }
    return maxv;
}


int main(void){

int h,w;
string ws;
	while(cin>> h >>w){
		if(h==0 && w==0|| cin.eof()) break;
		vector< vector<int> > ba(h,vector<int>(w+1));

		rep(i,h){ 
			cin >> ws;
			int c=1;
			rep(j,w){
				if(ws[j] != '*'){
					if(i<1) ba[i][j]=1;
					else ba[i][j] = ba[i-1][j]+1;
				}else{ ba[i][j] = 0; }
			}
		}
    int maxv = 0;
		rep(i,h){
        maxv = max( maxv, getLargestRectangle( w, ba[i] ) );
    }
//		rep(i,h) rep(j,w) printf("%02d %s",ba[i][j],(j<w-1? "":"\n"));
		cout << maxv << endl;
	}

	return 0;
	
}