#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <numeric>
#include <bitset>
#include <cmath>

static const int MOD = 1000000007;
using ll = long long;
using u32 = unsigned;
using u64 = unsigned long long;
using namespace std;

template<class T> constexpr T INF = ::numeric_limits<T>::max()/32*15+208;

int main() {
    int h, w;
    while(cin >> h >> w, h){
        vector<vector<int>> v(h, vector<int>(w, 0));
        for (int i = 0; i < h; ++i) {
            string s;
            cin >> s;
            for (int j = 0; j < w; ++j) {
                v[i][j] = (s[j] == '.');
            }
            if(i){
                for (int j = 0; j < w; ++j) {
                    if(v[i][j]) v[i][j] += v[i-1][j];
                }
            }
        }

        int ans = 0;
        for (int i = 0; i < h; ++i) {
            stack<int> s;
            v[i].emplace_back(0);
            vector<int> l(w+1);
            for (int j = 0; j <= w; ++j) {
                while(!s.empty() && v[i][j] <= v[i][s.top()]){
                    int k = s.top(); s.pop();
                    ans = max(ans, (j-l[k]-1)*v[i][k]);
                }
                l[j] = s.empty() ? -1 : s.top();
                s.emplace(j);
            }
        }
        cout << ans << "\n";
    }
    return 0;
}
