#include <iostream> 
#include <string> 
#include <vector> 
#include <cmath> 
#include <algorithm> 
#include <cstdlib> 
#include <ctime> 
#include <cstdio> 
#include <functional> 
#include <set> 
#include <sstream> 
#include <cctype>
#include <stack>
#include <queue>
#include <cstring>
#include <map>

using namespace std;

bool ok;
int d_pos[]={-2,-1,1};
int d_oto[]={1,0,-1};
void slove(const vector<int> &t, int t_pos, const vector<int> &s, int s_pos){
	
	if(s_pos==-1){
		if(t_pos==-1) ok=true;
		return;
	}else if(t_pos<0 || t_pos>=t.size()) return;

	for(int i=0;i<3;i++){
		int prev_oto=(t[t_pos]+d_oto[i]+12)%12;
		if(prev_oto==s[s_pos]) slove(t,t_pos+d_pos[i],s,s_pos-1);
	}

}

int main(){

	string o[]={"C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"};
	map<string,int> dic;
	for(int i=0;i<12;i++) dic[o[i]]=i;
	
	int T;
	cin>>T;
	
	for(int c=0;c<T;c++){
		int n,m;
		cin>>n>>m;
		
		vector<int> t(n),s(m);
		string tmp;
		for(int i=0;i<n;i++) cin>>tmp,t[i]=dic[tmp];
		for(int i=0;i<m;i++) cin>>tmp,s[i]=dic[tmp];;
		
		ok=false;
		slove(t,n-1,s,m-1);
		slove(t,n-2,s,m-1);
		if(ok) cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
	
	return 0;
}