#include <bits/stdc++.h>
#define dim 101
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
queue < pair <int,int> >coada;
int dx[]={-1,-1,1,1,0,-1,0,-1};
int dy[]={0,1,0,1,1,1,1,-1,-1};
int n,m,i,j,xi,yi,xf,yf,x=-1,y=-1;
int mr[dim][dim],mj[dim][dim];
int t=999999999;
void read()
{
char sir[256];
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin.get();
fin.get(sir,sizeof(sir));
for(j=1;j<=m;j++)
{
if(sir[j-1]=='R')
{
xi=i;yi=j;
mr[i][j]=1;
mj[i][j]=1;
}
else if(sir[j-1]=='J')
{
xf=i;yf=j;
mr[i][j]=1;
mj[i][j]=1;
}
if(sir[j-1]=='X')
{
mr[i][j]=1;
mj[i][j]=1;
}
else
{
mr[i][j]=0;
mj[i][j]=0;
}
}
}
fin.close();
}
bool inMap(int i,int j,int Map[dim][dim])
{
if(i<1 || j<1 || i>n || j>m)
return false;
if(Map[i][j]!=0)
return false;
return true;
}
/*void look(int Map[dim][dim])
{
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
fout<<Map[i][j]<<" ";
}
fout<<endl;
}
} */
void lee(int Map[dim][dim],int xi,int yi)
{
int i,j,inext,jnext;
Map[xi][yi]=1;
coada.push(make_pair(xi,yi));
while(!coada.empty())
{
i=coada.front().first;
j=coada.front().second;
coada.pop();
for(int k=0;k<8;k++)
{
inext=i+dx[k];
jnext=j+dy[k];
if(inMap(inext,jnext,Map)==true && Map[inext][jnext]==0)
{
coada.push(make_pair(inext,jnext));
Map[inext][jnext]=Map[i][j]+1;
}
}
}
}
void mrj()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(mr[i][j] == mj[i][j])
{
if(mr[i][j]<t && mr[i][j]!=1)
{
x=i;
y=j;
t=mr[i][j];
}
}
}
}
fout<<x<<' '<<y<<' '<<t;
return;
}
int main()
{
int x,y,time;
read();
lee(mr,xi,yi);
lee(mj,xf,yf);
//look(mr);
//look(mj);
mrj();
fout.close();
return 0;
}