#include <bits/stdc++.h>

using namespace std;
using ll = long long;
using pii = pair<int, int>;

template <class T>
T getLargestRectangle(const vector<T>& h) {
  int n = h.size();
  stack<int> st;
  vector<int> L(n), R(n);
  for (int i = 0; i < n; i++) {
    while (!st.empty() && h[st.top()] >= h[i]) st.pop();
    L[i] = st.empty() ? 0 : (st.top() + 1);
    st.emplace(i);
  }
  while (!st.empty()) st.pop();
  for (int i = n - 1; i >= 0; i--) {
    while (!st.empty() && h[st.top()] >= h[i]) st.pop();
    R[i] = st.empty() ? n : st.top();
    st.emplace(i);
  }
  T res = 0;
  for (int i = 0; i < n; i++) {
    res = max(res, h[i] * (R[i] - L[i]));
  }
  return res;
}

int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(false);
  cout << fixed << setprecision(10);
  
  int H, W;
  while (cin >> H >> W, H) {
    string s[510];
    for (int i = 0; i < H; i++) {
      cin >> s[i];
    }
    int dp[510][510];
    for (int i = 0; i < H; i++) {
      for (int j = 0; j < W; j++) {
        if (i == 0) dp[i][j] = s[i][j] == '.';
        else dp[i][j] = s[i][j] == '.' ? dp[i - 1][j] + 1 : 0;
      }
    }
    int ans = 0;
    for (int i = 0; i < H; i++) {
      vector<int> h;
      for (int j = 0; j < W; j++) h.emplace_back(dp[i][j]);
      ans = max(ans, getLargestRectangle<int>(h));
    }
    cout << ans << endl;
  }

  return 0;
}
