#include<bits/stdc++.h>
using namespace std;
int t,n,m,cd,gs;
long long ssb[1001000];//素数表
bool hs[1001000];//合数
long long a[100100],b[100100],c[100100];
bool pd(long long x){//判断素数,合数
for(int i=1;ssb[i]*ssb[i]<=x;i++)
if(x!=ssb[i]&&x%ssb[i]==0) return 1;
return 0;
}
void ycl(){//预处理素数
for(int i=2;i<=1000000;i++){
if(hs[i]) continue;
gs++,ssb[gs]=i;
int k=2;
while(i*k<=1000000)
hs[i*k]=1,k++;
}
}
int main(){
ycl();
cin>>t;
while(t--){
bool flag=1;
cin>>n>>m;
cd=0;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=m;i++) cin>>b[i];
if(m==0){
for(int i=1;i<=n;i++){
if(a[i]==c[cd]&&a[i]!=1){
flag=0;break;
}
cd++,c[cd]=a[i];
}
}
for(int i=1,j=1;i<=n&&j<=m;j++){
while(a[i]!=b[j]){
if(a[i]==c[cd]&&a[i]!=1){
flag=0;break;
}
else cd++,c[cd]=a[i];
i++;
}
if(flag==0) break;
i++;
if(j==m){
while(i<=n){
if(a[i]==c[cd]&&a[i]!=1){
flag=0;break;
}
cd++,c[cd]=a[i];
i++;
}
}
}
if(flag==0){
cout<<"NO"<<endl;
continue;
}
for(int i=1;i<=cd;i++)
if(pd(c[i])){flag=0;break;}
if(flag==0) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
//先除同 再找2 最后找合数
}
return 0;
}