//50
#include<iostream>
#include<algorithm>
#include<queue>

using namespace std;

char g[2][50][50];
bool p[50][50][50][50];
int w,h;

struct S{
  int x[2],y[2];
};

int main(){
  while(cin>>w>>h,w|h){
    int px[2],py[2];
    for(int y=0;y<h;y++){
      for(int i=0;i<2;i++){
	for(int x=0;x<w;x++){
	  cin>>g[i][y][x];
	  if(g[i][y][x]=='R'||g[i][y][x]=='L'){
	    px[i]=x;
	    py[i]=y;
	  }
	}
      }
    }
    fill(p[0][0][0],p[50][0][0],false);
    queue<S> que;
    S is={{px[0],px[1]},{py[0],py[1]}};
    que.push(is);
    while(!que.empty()){
      S c=que.front();
      int x=c.x[0],y=c.y[0],xx=c.x[1],yy=c.y[1];
      if(g[0][y][x]=='%'&&g[1][yy][xx]=='%')break;
      que.pop();
      if(p[x][y][xx][yy]++||(g[0][y][x]=='%'^g[1][yy][xx]=='%'))continue;
      for(int i=0;i<4;i++){
	int dy[]={0,1,0,-1};
	int dx[][4]={{1,0,-1,0},{-1,0,1,0}};
	int nx[2],ny[2];
	nx[0]=x+dx[0][i];
	ny[0]=y+dy[i];
	nx[1]=xx+dx[1][i];
	ny[1]=yy+dy[i];
	for(int j=0;j<2;j++){
	  if(nx[j]<0||w<=nx[j]||ny[j]<0||h<=ny[j]||g[j][ny[j]][nx[j]]=='#'){
	    nx[j]-=dx[j][i];
	    ny[j]-=dy[i];
	  }
	}
	S n={{nx[0],nx[1]},{ny[0],ny[1]}};
	que.push(n);
      }
    }
    cout<<(!que.empty()?"Yes":"No")<<endl;
  }
  return 0;
}