#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int a[102][102],b[102][102];
int dl[8]= {-1,-1,0,+1,+1,+1,0,-1};
int dc[8]= {0,+1,+1,+1,0,-1,-1,-1};
struct lee
{
int l,c;
} coadar[100*100+1],coadaj[100*100+1],pozcr,pozcj;
int main()
{
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,i,j,drr=0,str=0,drj=0,stj=0;
char s[101];
fin>>n>>m;
fin.get();
for(i=1; i<=n; i++)
{
fin.getline(s,101);
for(j=1; j<=m; j++)
{
if(s[j-1]=='X')
a[i][j]=b[i][j]=-1;
else if(s[j-1]==' ')
a[i][j]=b[i][j]=0;
else if(s[j-1]=='R')
{
a[i][j]=1;
coadar[drr]=(lee)
{
i,j
};
}
else if(s[j-1]=='J')
{
b[i][j]=1;
coadaj[drj]=(lee)
{
i,j
};
}
}
}
for(i=0; i<=n+1; i++)
{
a[i][0]=b[i][0]=-1;
a[i][m+1]=b[1][m+1]=-1;
}
for(i=0; i<=m+1; i++)
{
a[0][i]=b[0][i]=-1;
a[n+1][i]=b[n+1][i]=-1;
}
// for(i=0;i<=n+1;i++)
// {
// for(j=0;j<=m+1;j++)
// cout<<b[i][j]<<" ";
// cout<<endl;
// }
int gasit=0,lj,cj,lr,cr,pasj,pasr,lcj,ccj,lcr,ccr,imax,jmax,val;
while(!gasit)
{
pozcj=coadaj[stj];
lj=pozcj.l;
cj=pozcj.c;
pasj=b[lj][cj];
do
{
for(i=0; i<8; i++)
{
lcj=lj+dl[i];
ccj=cj+dc[i];
if(b[lcj][ccj]==0)
{
drj++;
coadaj[drj]=(lee)
{
lcj,ccj
};
b[lcj][ccj]=pasj+1;
if(b[lcj][ccj]==a[lcj][ccj])
{
gasit=1;
imax=lcj;
jmax=ccj;
val=b[lcj][ccj];
}
}
}
stj++;
pozcj=coadaj[stj];
lj=pozcj.l;
cj=pozcj.c;
}
while(b[lj][cj]==pasj);
pozcr=coadar[str];
lr=pozcr.l;
cr=pozcr.c;
pasr=a[lr][cr];
do
{
for(i=0; i<8; i++)
{
lcr=lr+dl[i];
ccr=cr+dc[i];
if(a[lcr][ccr]==0)
{
drr++;
coadar[drr]=(lee)
{
lcr,ccr
};
a[lcr][ccr]=pasr+1;
if(b[lcr][ccr]==a[lcr][ccr])
{
gasit=1;
imax=lcr;
jmax=ccr;
val=a[lcr][ccr];
}
}
}
str++;
pozcr=coadar[str];
lr=pozcr.l;
cr=pozcr.c;
}
while(a[lr][cr]==pasr);
}
// for(i=0; i<=n+1; i++)
// {
// for(j=0; j<=m+1; j++)
// cout<<b[i][j]<<" ";
// cout<<endl;
// }
// cout<<endl<<endl;
// for(i=0; i<=n+1; i++)
// {
// for(j=0; j<=m+1; j++)
// cout<<a[i][j]<<" ";
// cout<<endl;
// }
fout<<val<<" "<<imax<<" "<<jmax;
return 0;
}