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

struct size{
	int x, y;
};
const int max_size = 500;
char field[500][500];
int yx[500];
vector<size> dp[500][500];

int main(){
	int h, w;
	while(cin >> w >> h){
		if(w == 0 && h == 0) break;
		for(int i = 0; i < max(h, w); i++){
			yx[i] = 0;
		}
		for(int i = 0; i < h; i++){
			for(int j = 0; j < w; j++){
				cin >> field[i][j];
			}
		}
		size s;
		for(int i = 0; i < h; i++){
			for(int j = 0; j < w; j++){
				if(field[i][j] == '.'){
					if(i == 0){
						if(j != 0){
							if(field[i][j-1] == '.'){
								int x = 0;
								while(j-x >= 0 && field[i][j-x] == '.') x++;
								s.x = x;
								s.y = 1;
								dp[i][j].push_back(s);
							}else{
								s.x = 1;
								s.y = 1;
								dp[i][j].push_back(s);
							}
						}else{
							s.x = 1;
							s.y = 1;
						}
					}else{
						if(j == 0){
							if(field[i-1][j] == '.'){
								int y = 0;
								while(i-y >= 0 && field[i-y][j] == '.') y++;
								s.x = 1;
								s.y = y;
								dp[i][j].push_back(s);
							}else{
								s.x = 1;
								s.y = 1;
								dp[i][j].push_back(s);
							}
						}else{
							if(field[i-1][j] == '*' && field[i][j-1] == '*'){
								s.x = 1;
								s.y = 1;
								dp[i][j].push_back(s);
							}else if(field[i-1][j] == '*' && field[i][j-1] == '.'){
								int x = 0;
								while(j-x >= 0 && field[i][j-x] == '.') x++;
								s.x = x;
								s.y = 1;
								dp[i][j].push_back(s);
							}else if(field[i-1][j] == '.' && field[i][j-1] == '*'){
								int y = 0;
								while(i-y >= 0 && field[i-y][j] == '.') y++;
								s.x = 1;
								s.y = y;
								dp[i][j].push_back(s);
							}else{
								int y = 0, x = 0;
								while(i-y >= 0 && field[i-y][j] == '.') y++;
								while(j-x >= 0 && field[i][j-x] == '.') x++;
								for(vector<size>::iterator iter = dp[i-1][j].begin();
									iter != dp[i-1][j].end(); iter++){
										s.y = (*iter).y + 1;
										s.x = min(x, (*iter).x);
										dp[i][j].push_back(s);
								}
								for(vector<size>::iterator iter = dp[i][j-1].begin();
									iter != dp[i][j-1].end(); iter++){
										s.x = (*iter).x + 1;
										s.y = min((*iter).y, y);
										dp[i][j].push_back(s);
								}
							}
						}
					}
				}
			}
		}
		int max_size = 0;
		for(int i = 0; i < h; i++){
			for(int j = 0; j < w; j++){
				for(vector<size>::iterator iter = dp[i][j].begin();
					iter != dp[i][j].end(); iter++)
				{
					max_size = max(max_size, (*iter).y * (*iter).x);
				}
				dp[i][j].clear();
			}
		}
		cout << max_size << endl;
	}
	return 0;
}