#include <cstdio>
#include <stack>
#include <algorithm>

using namespace std;

struct Rectangle{ int height; int pos;};

int func(int size, int buffer[]){
  stack<Rectangle> S;
  int maxv = 0;
  buffer[size] = 0;

  for(int i = 0; i <= size; ++i){
    Rectangle rect;
    rect.height = buffer[i];
    rect.pos = i;
    if(S.empty()){
      S.push(rect);
    }else{
      if(S.top().height < rect.height){
	S.push(rect);
      }else if(S.top().height > rect.height){
	int target = i;
	while(!S.empty() && S.top().height >= rect.height){
	  Rectangle pre = S.top(); S.pop();
	  int area = pre.height * (i - pre.pos);
	  maxv = max(maxv, area);
	  target = pre.pos;
	}
	rect.pos = target;
	S.push(rect);
      }
    }
  }
  return maxv;
}

int main(){
  int H, W, map[501][501], i, j;
  char in[501];
  while(scanf("%d%d", &H, &W) && H && W){
    for(i = 0; i < H; ++i){
      scanf("%s", in);
      for(j = 0; j < W; ++j) map[i][j] = in[j] == '*' ? 0 : 1;
    }

    for(i = 1; i < H; ++i)
      for(j = 0; j < W; ++j)
	if(map[i][j])
	  map[i][j] = map[i - 1][j] + 1;

    int maxv = 0;
    for(i = 0; i < H; ++i)
      maxv = max(maxv, func(W, map[i]));
		  
    printf("%d\n", maxv);   
  }
  return 0;
}