#include <bits/stdc++.h>
using namespace std;

typedef pair<int,int> P;
typedef pair<P,int> P1;

char D[4] = {'U','R','D','L'};
int dy[4] = {-1,0,1,0};
int dx[4] = {0,1,0,-1};

int H, W;
string s[505];

P base[501*501];
int BS;
int used2[1001][1001][4];
int vis2[1001][1001];
P points[501*501];
int PS;

void sim(int sy, int sx){
  
  int y = sy, x = sx, dir = 2;
  
  while(1){
    
    int ny = y + dy[3], nx = x + dx[3];
    
    if( ny < 0 || nx < 0 || H <= ny || W <= nx ) break;
    
    if( s[ny][nx] == '.' ) break;
    
    y = ny;
    
    x = nx;
    
  }
      
  PS = 0;
  
  while(1){
    
    if( used2[y+500][x+500][dir] ) break;
    used2[y+500][x+500][dir] = 1;  
    
    if( vis2[y+500][x+500] == 0 ){
      points[PS++] = P( y, x );
      vis2[y+500][x+500] = 1;
    }
    
    int left = ( dir + 1 ) % 4;
    int ny = y + dy[left], nx = x + dx[left];
    
    int flag = 1;
    
    if( ny < 0 || nx < 0 || H <= ny || W <= nx ) flag = 0;
    
    if( s[ny][nx] == '.' ) flag = 0;
    
    if( flag ){
      
      dir = left;
      y += dy[dir];
      x += dx[dir];
      
    }
    else{
      
      int flag2 = 1;
      
      ny = y + dy[dir], nx = x + dx[dir];
      
      if( ny < 0 || nx < 0 || H <= ny || W <= nx ) flag2 = 0;
    
      if( s[ny][nx] == '.' ) flag2 = 0;
      
      if( flag2 ){
	
	y += dy[dir];
	x += dx[dir];
	
      }
      else{
	dir = ( dir + 3	) % 4;
      }
      
    }
    
  }
  
  sort( points, points + PS );
  
}

inline void dfs(int y, int x){
  
  s[y][x] = '.';
  
  for(int i=0;i<4;i++){
    
    int ny = y + dy[i];
    int nx = x + dx[i];
    
    if( ny < 0 || nx < 0 || H <= ny || W <= nx ) continue;
    
    if( s[ny][nx] == '.' )  continue;
    
    dfs( ny, nx );
    
  }
  
}

bool com(){
  
  int cy = points[0].first;
  int cx = points[0].second;
  
  for(int i=0;i<PS;i++){
    points[i].first -= cy;
    points[i].second -= cx;
  }
  
  if( PS != BS ) return false;
  
  bool flag = true;
  
  for(int i=0;i<PS;i++){
    if( points[i] != base[i] ) flag = false;
  }
  
  return flag;
}

int used[1001][1001][4];
int vis[1001][1001];

signed main(){
  
  ios::sync_with_stdio(false);
  cin.tie(0);
  
  cin>>H>>W;
  
  for(int i=0;i<H;i++) cin>>s[i];
  
  int cnt = 0;
  
  while(1){
    
    cout<<"? L"<<endl;
    
    string res;
    cin>>res;
    
    if( res == "NO" ) break;
    
    cnt++;
    
  }
  
  int y = 0, x = 0, dir = 2;
  int sy = 0, sx = cnt;
  int flag = 0;
  
  while(1){
    
    if( used[y+500][x+500][dir] ) break;
    used[y+500][x+500][dir] = 1;
    
    if( vis[y+500][x+500] == 0 ){
      base[BS++] = P( y, x );
      vis[y+500][x+500] = 1;
    }
    
    int right = ( dir + 1 ) % 4;
    string res = "NO";
    
    if( !flag ){
      
      cout<<"? "<<D[right]<<endl;
      cin>>res;
      
    }
    
    if( res == "YES" ){
      
      dir = right;
      y += dy[dir];
      x += dx[dir];
            
    }
    else{
      
      cout<<"? "<<D[dir]<<endl;
      
      string res;
      cin>>res;
      
      if( res == "YES" ){
	
	y += dy[dir];
	x += dx[dir];
	flag = 0;
      }
      else{
	dir = ( dir + 3	) % 4;
	flag = 1;
      }
      
    }
    
  }
  
  sort( base, base + BS );
  
  int cy = base[0].first;
  int cx = base[0].second;
  
  for(int i=0;i<BS;i++){
    base[i].first -= cy;
    base[i].second -= cx;
  }
  
  sy -= cy;
  sx -= cx;
  
  for(int i=0;i<H;i++){
    
    for(int j=0;j<W;j++){
      
      if( s[i][j] == '.' ) continue;
      
      sim( i, j );
      
      dfs( i, j );
      
      if( com() == true ){
	
	cout<<"! "<<i+sy<<' '<<j+sx<<endl;
	
	return 0;
      }
      
    }
    
  }
  
  return 0;
}



Measured memory_bytes: 26864