#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int N=60;
typedef pair<int,int> PII;
PII q[N*N];
char g[N][N];
bool st[N][N];
int n,m;
vector<PII> s1;
vector<PII> s2;
int flag;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
void bfs(int sx,int sy)
{
int hh=0,tt=0;
q[0]={sx,sy};
st[sx][sy]=true;
if(flag==0){s1.push_back({sx,sy});}
else {s2.push_back({sx,sy});}
while(hh<=tt)
{
auto e=q[hh++];
int nx=e.first,ny=e.second;
for(int i=0;i<4;i++)
{
int x=nx+dx[i],y=ny+dy[i];
if(g[x][y]=='.'||st[x][y])continue;
if(g[x][y]=='X'&&!st[x][y]){
if(flag==0){s1.push_back({x,y});}
else {s2.push_back({x,y});}
q[++tt]={x,y};
st[x][y]=true;
}
}
}
}
int getlen(int x1,int y1,int x2,int y2)
{
int tmp=abs(x1-x2)+abs(y1-y2);
return tmp;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
memset(g,'.',sizeof(g));
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>(g[i]+1);
flag=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(g[i][j]=='X'&&!st[i][j])
{
bfs(i,j);
flag=1;
}
}
}
// sort(s1.begin(),s1.end());
// sort(s2.begin(),s2.end());
// for(int i=0;i<s1.size();i++)cout<<s1[i].first<<" "<<s1[i].second<<endl;
// cout<<"<<<<<<<<<<<"<<endl;
// for(int i=0;i<s2.size();i++)cout<<s2[i].first<<" "<<s2[i].second<<endl;
int length=1e7;
for(int i=0;i<s1.size();i++)
{
for(int j=0;j<s2.size();j++)
{
length=min(length,getlen(s1[i].first,s1[i].second,s2[j].first,s2[j].second));
}
}
cout<<length-1<<endl;
return 0;
}