#include <iostream>
#include <stack>
#include <cstring>

using namespace std;

struct R{
	int height;
	int pos;
};

int dp[505][505];

int calc_LARH (int n, int *hist )
{
	hist[n] = 0;
	stack<R> st;
	int res = 0;
	R curr;

	for (int i = 0; i <= n; i++ ){
		curr.height = hist[i];
		curr.pos = i;
		if (st.empty() ){
			st.push (curr );
			continue;
		} // end if

		if (st.top().height < hist[i] ){
			st.push (curr );
			continue;
		}else if (st.top().height == hist[i] ){
			continue;
		} // end if
		int last_pos = i;
		while (!st.empty() && st.top().height >= hist[i] ){
			R pre = st.top(); st.pop();
			int currs = pre.height*(i - pre.pos);
			res = max (res, currs );
			last_pos = pre.pos;
		} // end while
		curr.pos = last_pos;
		st.push (curr );
	} // end for

	return res;
}

int main()
{
	int h, w;

	while (cin >> h >> w && h && w ){
		memset (dp, 0, sizeof (dp ) );
		for (int i = 0; i < h; i++ ){
			for (int j = 0; j < w; j++ ){
				char b;
				cin >> b;
				if (b == '.' ){
					if (i == 0 ){
						dp[0][j] = 1;
					}else{
						dp[i][j] = dp[i-1][j] + 1;
					} // end if
				} // end if
			} // end for
		} // end for

		int res = 0;
		for (int i = 0;i < h; i++ ){
			int currs = calc_LARH (w, dp[i] );
			res = max (res, currs );
		} // end for
		cout << res << endl;	

	} // end loop

		
	return 0;
}