#include <bits/stdc++.h>
#define N 105
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int J[N][N],R[N][N],n,m;
int lj,cj,lr,cr;
void Citire()
{ char s[N];
int i,j;
fin>>n>>m; fin.get();
for(i=1;i<=n;i++)
{ fin.getline(s+1,N);
for(j=1;s[j];j++)
if(s[j]=='X') J[i][j]=R[i][j]=-1;
else if(s[j]=='J') lj=i,cj=j;
else if(s[j]=='R') lr=i,cr=j;
}
}
void Bordare(int a[][N],int n,int m)
{ int i;
for(i=0;i<=m+1;i++) a[0][i]=a[n+1][i]=-1;
for(i=0;i<=n+1;i++) a[i][0]=a[i][m+1]=-1;
}
void Lee(int a[][N], int li, int ci)
{ queue < pair <int,int> > Q;
int l,c,lv,cv,k;
int dl[]={-1,-1,-1,0,0,1,1,1};
int dc[]={-1,0,1,-1,1,-1,0,1};
Q.push({li,ci});
a[li][ci]=1;
while(!Q.empty())
{ l=Q.front().first;
c=Q.front().second;
Q.pop();
for(k=0;k<8;k++)
{ lv=l+dl[k]; cv=c+dc[k];
if(a[lv][cv]==0)
{ a[lv][cv]=a[l][c]+1;
Q.push({lv,cv});
}
}
}
}
void Rezolva()
{ int i,j,vmin=n*m,imin,jmin;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(J[i][j]==R[i][j] && J[i][j]>0 && J[i][j]<vmin)
{ vmin=J[i][j];
imin=i;
jmin=j;
}
fout<<vmin<<" "<<imin<<" "<<jmin;
}
int main()
{ Citire();
Bordare(J,n,m);
Lee(J,lj,cj);
Bordare(R,n,m);
Lee(R,lr,cr);
Rezolva();
return 0;
}