/// https://www.pbinfo.ro/probleme/1677/tort
#include
#include
using namespace std;
ifstream cin("tort.in");
ofstream cout("tort.out");
char mat[505][505];
int dp[505][505];
bool valid(int i, int j , int l)
{
if(mat[i][j]=='X') return false;
if(mat[i-l+1][j]=='X') return false;
if(mat[i][j-l+1]=='X') return false;
if(mat[i-l+1][j-l+1] == 'X') return false;
return true;
}
void update(int pi, int pj, int l)
{
for(int i = pi-l+1;i<=pi;i++)
for(int j = pj-l+1;j<=pj;j++)
mat[i][j] = 'X';
}
int main()
{
int n , m, maxL = -1e9 ;
cin>>n>>m;
//Construim dp[i][j] = patratul de latura maxima cu coltul din dreapta-jos in (i,j)
for(int i = 1;i<=n;i++)
for(int j = 1;j<=m;j++)
{
cin>>mat[i][j];
dp[i][j] = 1;
if(mat[i][j]==mat[i-1][j]&&mat[i][j]==mat[i][j-1]&&mat[i][j]==mat[i-1][j-1])
dp[i][j] = min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
maxL = max(maxL,dp[i][j]);
}
int p = 0;
for(int k = maxL;k>0;k--)
{
for(int i = 1;i<=n;i++)
for(int j = 1;j<=m;j++)
{
if(dp[i][j]>=k&&valid(i,j,k))
{
cout<