#include <iostream>
#include <vector>
#include <stack>
#include <map>
#include <sstream>

using namespace std;

typedef pair<int, int> R;

int max_rectangular (vector <int> height )
{
	int size = height.size();

	stack<R> S;
	int pos = 0;
	int res = 0;

	for (int i = 0; i < size; ++i){

		R rect;

		rect.first = height[i];
		rect.second = i;

		if (S.empty() ){
			S.push (rect );
			continue;
		}else if ((S.top()).first < height[i] ){
			S.push (rect );
			continue;
		}else if ((S.top()).first == height[i] ){
			continue;
		} // end if

		while (!S.empty() && (S.top()).first >= height[i] ){
			R r = S.top(); S.pop();				
			int area = r.first*(i - r.second );
			res = max (res, area );
			pos = r.second;
		} // end while
		rect.second = pos;
		S.push (rect );

	} // end for

	while (!S.empty() ){
		R r = S.top(); S.pop();				
		int area = r.first*(size - r.second );
		res = max (res, area );
	} // end while

	return res;
}

int main()
{
//	cut here before submit 
//	freopen ("testcase.rs", "r", stdin );
	string str = "";
	int h, w;

	while (getline (cin, str ) ){
		stringstream ssn(str);
		ssn >> h >> w;

		if (h == 0 && w == 0 ){
			break;
		} // end if
		
		vector <vector <char> > grid (h, vector <char>(w, ' ' ) );

		int i,j;
		for (i = 0; i < h; ++i){
			getline (cin, str );
			for (j = 0; j < w; ++j){
				grid[i][j] = str[j];
			} // end for
		} // end for

		vector <vector <int> > t (h, vector <int> (w, 0 ) );

		for (j = 0; j < w; ++j){
			if (grid[0][j] == '.'){
				t[0][j] = 1;
			} // end if
		} // end for
		
		for (i = 1; i < h; ++i){
			for (j = 0; j < w; ++j){
				if (grid[i][j] == '.'){
					t[i][j] += t[i-1][j] + 1;
				} // end if
			} // end for
		} // end for

		int res = 0;
		for (i = 0; i < h; ++i){
			int area = max_rectangular (t[i] );
			res = max (res, area );
		} // end for
		cout << res << endl;	

	} // end loop

		
	return 0;
}