#include<iostream>
using namespace std;
struct TreeNode{
int data;
TreeNode * lchild;
TreeNode * rchild;
int flag;//0表示未访问过,1访问过
};
TreeNode * NewTreeNode(int tmp){
TreeNode * T=new TreeNode;
T->data=tmp;
T->lchild=T->rchild=NULL;
T->flag=0;
return T;
}
TreeNode * Insert(TreeNode * T,int tmp){
if(!T) T=NewTreeNode(tmp);
else{ //这个else必须要
if(tmp>T->data) T->rchild=Insert(T->rchild,tmp);
else T->lchild=Insert(T->lchild,tmp);
}
return T;
}
TreeNode * MakeTree(int N){
int tmp; cin>>tmp;
TreeNode * T=NewTreeNode(tmp);//创建根节点
for(int i=1;i<N;i++){ //创建其它节点
cin>>tmp;
T=Insert(T,tmp);
}
return T;
}
bool Check(TreeNode * T,int tmp){
if(T->flag){
if(tmp>T->data) return Check(T->rchild,tmp);
else if(tmp<T->data) return Check(T->lchild,tmp);
else return false;
}else{
if(tmp==T->data){
T->flag=1;
return true;
}else return false;
}
}
bool Judge(TreeNode * T,int N){
int flag=0;//0表示当前还一致,1表示当前已经不一致
int tmp;cin>>tmp;
if(T->data!=tmp) flag=1;
else T->flag=1;//访问过
//cout<<flag<<" ";
for(int i=1;i<N;i++){
cin>>tmp;
//cout<<Check(T,tmp)<<" ";
if( (!flag) && (!Check(T,tmp)) ) flag=1; //!flag表示当前还一致, !Check(T,tmp)表示接下来产生了不一致 !要打(),因为!优先级高于&&
}
if(flag) return false;
else return true;
}
void Reset(TreeNode * T){
T->flag=0;
if(T->lchild) Reset(T->lchild);
if(T->rchild) Reset(T->rchild);
}
void FreeTree(TreeNode * T){
if(T->lchild) FreeTree(T->lchild);
if(T->rchild) FreeTree(T->rchild);
delete(T);
}
int main(){
//freopen("input.txt","r",stdin);
int N,L;
cin>>N;
while(N){ //if
cin>>L; //这句要在建树之前,因为建树也要读取数据
TreeNode * T=MakeTree(N);
for(int i=0;i<L;i++){
if(Judge(T,N)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
Reset(T);//清除T中标记的flag,都初始化为0
}
FreeTree(T);
cin>>N;//换一颗树
}
return 0;
}