#include <iostream>
#include <stdio.h>
using namespace std;
#define MAX 100
struct cord
{
int x, y;
};
int n, m;
int a[MAX][MAX], b[MAX][MAX];
cord r,j,vr[MAX*MAX], vj[MAX*MAX], sf, x;
int dx[] = {-1,0,1,0};
int dy[] = {0,1,0,-1};
int valid(int x, int y)
{
if(x<=n && x>=1 && y>=1&& y<=m)
return 1;
return 0;
}
void rj(int x, int y, int a[][100], cord v[])
{ int p=1, c=1;
v[p].x=x;
v[p].y=y;
a[x][y]=1;
while((x!=sf.x || y!=sf.y) && c<=p)
{
for(int i=0; i<4; i++)
{
if(valid(x+dx[i],y+dy[i]) && a[x+dx[i]][y+dy[i]]==0)
{
p++;
v[p].x=x+dx[i];
v[p].y=y+dy[i];
a[x+dx[i]][y+dy[i]]=a[x][y]+1;
}
}
c++;
x=v[c].x;
y=v[c].y;
}
}
void copy(int a[][100], int b[][100], int n, int m)
{
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
b[i][j]=a[i][j];
}
int comp(int a[][100], int b[][100], cord &x)
{
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
if(a[i][j]==b[i][j] && a[i][j]>1)
{ x.x=i;
x.y=j;
return a[i][j];
}
return -1;
}
int main()
{
freopen("rj.in", "r", stdin);
freopen("rj.out", "w", stdout);
scanf("%d %d \n", &n, &m);
char z;
for(int i=1; i<=n; i++)
{
for(int c=1; c<=m; c++)
{
scanf("%c",&z);
if(z=='R'){ r.x=i; r.y=c; a[i][c]=1;}
if(z=='J'){ j.x=i; j.y=c; a[i][c]=1;}
if(z=='X')a[i][c]=-1;
}
scanf("\n");
}
copy(a,b,n,m);
rj(r.x,r.y,b,vr);
rj(j.x,j.y,a,vj);
comp(a,b,x);
cout<<x.x<<" "<<x.y<<" "<<comp(a,b,x);
return 0;
}