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

struct Rect {
    int h;
    int pos;
};

int c[500][501];
int h, w;

int main() {
    while (cin >> h >> w, h|w) {
        vector<string> ms(h);
        for (int i = 0; i < h; i++) {
            cin >> ms[i];
        }
        for (int x = 0; x < w; x++) {
            c[0][x] = (ms[0][x] == '*') ? 0 : 1;
        }
        for (int y = 1; y < h; y++) {
            for (int x = 0; x < w; x++) {
                c[y][x] = (ms[y][x] == '*') ? 0 : c[y-1][x] + 1;
            }
        }
        int ans = 0;
        for (int y = 0; y < h; y++) {
            stack<Rect> s;
            c[y][w] = 0;
            for (int x = 0; x <= w; x++) {
                Rect r;
                r.h = c[y][x];
                r.pos = x;
                if (s.empty() || s.top().h < r.h) {
                    s.push(r);
                } else if (s.top().h > r.h) {
                    int j = x;
                    while (!s.empty() && s.top().h >= r.h) {
                        Rect r0 = s.top(); s.pop();
                        ans = max(ans, r0.h * (x - r0.pos));
                        j = r0.pos;
                    }
                    r.pos = j;
                    s.push(r);
                }
            }
        }
        cout << ans << endl;
   }
}