#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<utility>
#include<vector>
using namespace std;
struct P{
	int x,y;
	P(int x,int y):x(x),y(y){}
	P(){}
	bool operator <(const P&p)const{return x-p.x?x<p.x:y<p.y;}
	bool operator ==(const P&p)const{return x==p.x&&y==p.y;}
};
typedef vector<P> VP;

static int mark[512][512];
char map[512][512];
const char MARK='*';
const int INF = 0x3F3F3F3F;

int minX[512],	
	minY[512];

bool InMark(P p1, P p2)
{
	return (mark[p2.y][p2.x]-mark[p2.y][p1.x-1]-mark[p1.y-1][p2.x]+mark[p1.y-1][p1.x-1])!=0;
}

void ToEfficient(VP &refVec, P curP)
{
	refVec.erase(
		remove_if(refVec.begin(),refVec.end(),
			[curP](P p)->bool{ return (mark[curP.y][curP.x]-mark[curP.y][p.x-1]-mark[p.y-1][curP.x]+mark[p.y-1][p.x-1])!=0;}
		),refVec.end());

	memset(minX,INF,sizeof(minX));
	memset(minY,INF,sizeof(minY));
	for(int i=0; i<refVec.size(); ++i)
	{
		const P &p=refVec[i];
		minX[p.y] = min(minX[p.y],p.x);
		minY[p.x] = min(minY[p.x],p.y);
	}
	refVec.erase(
		remove_if(refVec.begin(),refVec.end(),
		[](P p)->bool{return (minX[p.y]<p.x)||(minY[p.x]<p.y);}
			),refVec.end());
	sort(refVec.begin(),refVec.end());
	refVec.erase(
		unique(refVec.begin(),refVec.end()),
		refVec.end());
}

int main()
{
	int h,w;
	while(scanf("%d%d",&h,&w),h)
	{
		memset(mark,0,sizeof(mark));
		memset(map,0,sizeof(map));
		int x,y;
		for(y=1;y<=h;++y)
			scanf("%s",&map[y][1]);

		for(y=1; y<=h; ++y)
			for(x=1; x<=w; ++x)
				mark[y][x] = mark[y-1][x]+mark[y][x-1]-mark[y-1][x-1] + (map[y][x]==MARK);

		static VP dp[512][512];
		for(y=0;y<512;++y)for(x=0;x<512;++x)dp[y][x].clear();
		int res=0;
		for(y=1; y<=h; ++y)
		{
			for(x=1; x<=w; ++x)
			{
				if(map[y][x]==MARK)continue;
				VP &refVec = dp[y][x];
				const VP &xVec = dp[y][x-1], &yVec = dp[y-1][x];
				refVec.reserve(xVec.size()+yVec.size()+1);
				refVec.assign(yVec.begin(),yVec.end());
				refVec.insert(refVec.end(), xVec.begin(),xVec.end());
				refVec.push_back( P(x,y) );

				ToEfficient(refVec, P(x,y));

				for(int i=0; i<refVec.size(); ++i)
				{
					int area = (x-refVec[i].x+1)*(y-refVec[i].y+1);
					if(res < area)
						res = area;
				}
			}
		}
		printf("%d\n",res);
	}
	return 0;
}