#include <iostream>
#include <string>
#include <cstring>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <utility>
  
#define YNUM(X) ( X < 0 ? X + 3 : X )
  
int h, w;
bool map[502][502];
char in[502];
int data[3][502][502];
int data_max = 0;
int height_sum[502][502], width_sum[502][502];

int main(){
    while( std::cin >> h >> w, w + h != 0 ){
        data_max = 0;
  
        memset( height_sum, 0, sizeof(height_sum) );
        memset( width_sum, 0, sizeof(width_sum) );
  
        for( int i = 1; i <= h; ++i ){
            std::cin >> in;
            for( int l = 1; l <= w; ++l ){
                map[i][l] = ( in[l - 1] == '.' );
                if(map[i][l]){
                    width_sum[i][l] = width_sum[i][l - 1] + 1;
                    height_sum[i][l] = height_sum[i - 1][l] + 1;
                }
            }
        }
  
        for( int i = 1, n = 1; n <= h; n++, i = n % 3 ){
            for( int l = 1; l <= w; l++ ){
                memset( data[i][l], 0, sizeof(int) * 502 );
                if( map[n][l] ){
                    if( map[n - 1][l] && map[n][l - 1] ){
                        int x_cnt = width_sum[n][l], y_cnt = height_sum[n][l];
  
                        for( int m = 1; m < 502; ++m ){
                            if( data[YNUM(i - 1)][l][m] ){
                                data[i][l][std::min(m, x_cnt)] = std::max( data[i][l][std::min(m, x_cnt)], data[YNUM(i - 1)][l][m] + 1 );
                                data_max = std::max( data_max, std::min(m, x_cnt) * data[i][l][std::min(m, x_cnt)] );
                            }
                        }
                        for( int m = 1; m < 502; ++m ){
                            if( data[i][l - 1][m] ){
                                data[i][l][m + 1] = std::max( data[i][l][m + 1], std::min(data[i][l - 1][m], y_cnt) );
                                data_max = std::max( data_max, (m + 1) * data[i][l][m + 1] );
                            }
                        }
                          
                    }else if( map[n - 1][l] ){
                        for( int m = 0; m < 502; ++m ){
                            if( data[YNUM(i - 1)][l] ){
                                data[i][l][1] = std::max( data[i][l][1], data[YNUM(i - 1)][l][m] + 1 );
                                //data_max = std::max( data_max, data[i][l][1] );
                            }
                        }
  
                    }else if( map[n][l - 1] ){
                        for( int m = 1; m < 502; ++m ){
                            if( data[i][l - 1][m] ){
                                data[i][l][m + 1] = std::max( data[i][l][m + 1], 1 );
                                //data_max = std::max( data_max, (m + 1) * data[i][l][m + 1] );
                            }
                        }
  
                    }else data[i][l][1] = std::max( data[i][l][1], 1 )/*, data_max = std::max( data_max, data[i][l][1] )*/;
  
                }   
            }
        }
  
        std::cout << data_max << std::endl;
    }
    return 0;
}