#include <iostream>
#include <cstdio>
#include <cassert>
#include <cstring>
#include <vector>
#include <valarray>
#include <array>
#include <queue>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <algorithm>
#include <cmath>
#include <complex>
#include <random>

using namespace std;
using ll = long long;
using ull = unsigned long long;
constexpr int TEN(int n) {return (n==0)?1:10*TEN(n-1);}

const int MN = 550;
bool g[MN][MN];
int dp1[MN][MN], dp2[MN][MN];
bool solve() {
    int h, w;
    cin >> h >> w;
    if (!h) return false;
    for (int y = 0; y < h; y++) {
        string s; cin >> s;
        for (int x = 0; x < w; x++) {
            g[y][x] = s[x] == '*';
        }
    }
    memset(dp1, 0, sizeof(dp1));
    int ans = 0;
    for (int y = 0; y < h; y++) {
        for (int x = 0; x < w; x++) {
            dp2[x][x+1] = dp1[x][x+1];
            if (g[y][x]) dp2[x][x+1] = y+1;
        }
        for (int d = 2; d <= w; d++) {
            for (int l = 0; l <= w-d; l++) {
                int r = l+d;
                dp2[l][r] = max(dp2[l+1][r], dp2[l][r-1]);
            }
        }
        for (int l = 0; l < w; l++) {
            for (int r = l+1; r <= w; r++) {
                dp1[l][r] = dp2[l][r];
                ans = max(ans, (r-l)*(y+1-dp1[l][r]));
            }
        }
    }
    printf("%d\n", ans);
    return true;
}

int main() {
    while (solve()) {}
    return 0;
}