#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cctype>

#include <iostream>
#include <vector>
#include <deque>
#include <queue>
#include <map>
#include <algorithm>

using namespace std;

#define rep(i, n) for(int i = 0; i < n; i++)
#define repi(i,l,n) for(int (i)=(int)(l);(i)<(int)(n);(i)++)
#define d_arr(arr, h, w) rep(i,(h) ){ cout << "["; rep(j,(w) ) { cout << (arr)[i][j] << ", "; } cout << "]" << endl;}
#define IN(x,s,g) ((x) >= (s) && (x) < (g))
#define ISIN(x,y,w,h) (IN((x),0,(w)) && IN((y),0,(h)))
#define print(x) printf("%d\n",x);

typedef pair<int ,int> P;

class car
{
    int id;
    int num;
    public:
        car(int x, int y){ id=x; num=y; }
};


int main()
{
    char grid[500][500];
    int  dp_u[500][500];
    int  dp_l[500][500];
    int H,W;
    while ( cin >> H >> W )
    {
        if(H == 0 && W == 0) { break; }
        rep(i,H){
            rep(j,W){
                cin >> grid[i][j];
            }
        }

        rep(i,H){
            rep(j,W){
                if(grid[i][j] == '*') { dp_u[i][j] = 0; dp_l[i][j] = 0; continue; }
                if(i == 0 && j == 0){
                    dp_u[i][j] = 1;
                    dp_l[i][j] = 1;
                } else if( i == 0 ) {
                    dp_u[i][j] = 1;
                    dp_l[i][j] = 1 + dp_l[i][j-1];
                } else if( j == 0) {
                    dp_u[i][j] = 1 + dp_u[i-1][j];
                    dp_l[i][j] = 1;
                } else {
                    dp_u[i][j] = 1 + min(dp_u[i-1][j-1], dp_u[i-1][j]) ;
                    dp_l[i][j] = 1 + min(dp_l[i-1][j-1], dp_l[i][j-1]) ;
                }
            }
        }

        int maxn = 0;
        rep(i,H){
            rep(j,W){
                if( maxn < dp_u[i][j]*dp_l[i][j] ) { maxn = dp_u[i][j]*dp_l[i][j]; }
            }
        }
        cout << maxn << endl;
    }
    return 0;
}