#include<bits/stdc++.h>
using namespace std;
#define MAX 52
int dy[]={-1,0,1,0};
int dx[]={0,1,0,-1};
int H,W;
string s,t;
char A[MAX][MAX];
char B[MAX][MAX];
int asy,asx,aty,atx;
int bsy,bsx,bty,btx;
bool visited[MAX][MAX][MAX][MAX];
struct state{int ay,ax,by,bx;};

string solve(){
  for(int i=0;i<MAX;i++)
    for(int j=0;j<MAX;j++)
      for(int k=0;k<MAX;k++)
	for(int l=0;l<MAX;l++)
	  visited[i][j][k][l]=false;
  queue<state> Q;
  Q.push((state){asy,asx,bsy,bsx});
  while(!Q.empty()){
    state s=Q.front();Q.pop();
    bool fa=false,fb=false;
    if(s.ay==aty&&s.ax==atx)fa=true;
    if(s.by==bty&&s.bx==btx)fb=true;
    if(fa&&fb)return "Yes";
    if(fa||fb)continue;
    for(int i=0;i<4;i++){
      state to=s;
      to.ay+=dy[i];
      to.ax+=dx[i];
      if(A[to.ay][to.ax]=='#'){
	to.ay=s.ay;
	to.ax=s.ax;
      }
      to.by+=dy[i];
      to.bx-=dx[i];
      if(B[to.by][to.bx]=='#'){
	to.by=s.by;
	to.bx=s.bx;
      }
      if(visited[to.ay][to.ax][to.by][to.bx])continue;
      visited[to.ay][to.ax][to.by][to.bx]=true;
      Q.push(to);
    }
  }
  return "No";
}

int main(){
  while(1){
    cin>>W>>H;
    if(H==0&&W==0)break;
    for(int i=0;i<MAX;i++)
      for(int j=0;j<MAX;j++)
	A[i][j]=B[i][j]='#';
    for(int i=0;i<H;i++){
      cin>>s>>t;
      for(int j=0;j<W;j++){
	A[i+1][j+1]=s[j];
	B[i+1][j+1]=t[j];
	if(s[j]=='L'){
	  A[i+1][j+1]='.';
	  asy=i+1,asx=j+1;
	}
	if(s[j]=='%'){
	  A[i+1][j+1]='.';
	  aty=i+1,atx=j+1;
	}
	if(t[j]=='R'){
	  B[i+1][j+1]='.';
	  bsy=i+1,bsx=j+1;
	}
	if(t[j]=='%'){
	  B[i+1][j+1]='.';
	  bty=i+1,btx=j+1;
	}
      }
    }
    cout<<solve()<<endl;
  }
  return 0;
}