#include <iostream>
#include <stack>
#include <vector>
#include <string>

struct Pair {
	Pair(const int &a = 0, const int &b = 0) :x{ a }, size{ b } {};
	int x, size;
};
std::vector<std::vector<int>> to_size(const std::vector<std::vector<char>> &map) {
	std::vector<std::vector<int>> res(map.size(), std::vector<int>(map.front().size(), 0));
	for (auto i = 0; i < map.at(0).size(); ++i) {
		if (map.at(0).at(i) == '.') {
			res.at(0).at(i) = 1;
		}
	}
	for (auto i = 1; i < map.size(); ++i) {
		for (auto j = 0; j < map.at(i).size(); ++j) {
			if (map.at(i).at(j) == '.') {
				res.at(i).at(j) = res.at(i - 1).at(j) + 1;
			}
		}
	}
	return res;
}
int stack_operation(std::stack<Pair> &stack) {
	auto last = stack.top();
	stack.pop();
	if (stack.top().size < last.size) {
		stack.push(last);
		return 0;
	}
	else if (stack.top().size > last.size) {
		auto sus = 0;
		Pair l;
		while (stack.top().size > last.size) {
			auto sus2 = (last.x - stack.top().x) * stack.top().size;
			if (sus < sus2) {
				sus = sus2;
			}
			l = stack.top();
			stack.pop();
		}
		stack.push(Pair(l.x, last.size));
		return sus;
	}
	else {
		return 0;
	}

}
int get_max(const std::vector<std::vector<int>> &map) {
	int max = 0;
	for (const auto &line : map) {
		std::stack<Pair> stack;
		stack.push(Pair(0, 0));
		for (auto i = 0; i < line.size(); ++i) {
			stack.push(Pair(i, line.at(i)));
			auto sus = stack_operation(stack);
			if (sus > max) {
				max = sus;
			}
		}
		stack.push(Pair(line.size(), 0));
		auto sus = stack_operation(stack);
		if (sus > max) {
			max = sus;
		}
	}
	return max;
}
int main() {
	int h, w;
	while (std::cin >> h >> w && h != 0 && w != 0) {
		std::vector<std::vector<char>> state(h, std::vector<char>(w));
		for (auto &line : state) {
			std::string arg;
			std::cin >> arg;
			for (auto i = 0; i < w; ++i) {
				line.at(i) = arg[i];
			}
		}
		auto map = to_size(state);
		std::cout << get_max(map) << '\n';
	}
	return 0;
}