#include<stdio.h>
#include<stdlib.h>
#define bool int
#define false 0
#define true 1
typedef int ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
BinTree Insert( BinTree BST, ElementType X );
BinTree Delete( BinTree BST, ElementType X );
Position Find( BinTree BST, ElementType X );
Position FindMin( BinTree BST );
Position FindMax( BinTree BST );
Position buildSearchTree(BinTree BST,ElementType X);
bool compareSearchTree(BinTree masterTree,BinTree branchTree);
void cleanTree(BinTree BST);
int main()
{
int N,L;
int temp;
scanf("%d",&N);
if(N == 0)
return 0;
scanf("%d",&L);
BinTree masterTree = NULL;
BinTree branchTree = NULL;
while(N != 0)
{
for(int i =0;i < N;i++)
{
scanf("%d",&temp);
masterTree = Insert(masterTree,temp);
}
for(int i = 0;i < L;i++)
{
for(int i = 0;i < N;i++)
{
scanf("%d",&temp);
branchTree = Insert(branchTree,temp);
}
if(compareSearchTree(masterTree,branchTree))
printf("Yes\n");
else
printf("No\n");
cleanTree(branchTree);
branchTree = NULL;
}
cleanTree(masterTree);
masterTree = NULL;
scanf("%d",&N);
if(N == 0)
return 0;
scanf("%d",&L);
}
return 0;
}
void cleanTree(BinTree BST)
{
BinTree temp;
while(BST)
{
BST = Delete(BST,FindMin(BST)->Data);
}
}
bool compareSearchTree(BinTree masterTree,BinTree branchTree)
{
bool isIdentical ;
if(masterTree == NULL&&branchTree == NULL)
isIdentical = true;
else if((masterTree != NULL&&branchTree == NULL) || (masterTree == NULL&&branchTree != NULL) ||(masterTree->Data != branchTree->Data))
isIdentical = false;
else
{
isIdentical = compareSearchTree(masterTree->Left,branchTree->Left)&&compareSearchTree(masterTree->Right,branchTree->Right);
}
return isIdentical;
}
Position Find( BinTree BST, ElementType X ){
if (BST==NULL) return BST;
if (X==BST->Data) return BST;
if (X>BST->Data) return Find(BST->Right,X);
if (X<BST->Data) return Find(BST->Left,X);
}
Position FindMin( BinTree BST ){
if (BST){
while (BST->Left!=NULL){
BST=BST->Left;
}
}
return BST;
}
Position FindMax( BinTree BST ){
if (BST){
while (BST->Right!=NULL){
BST=BST->Right;
}
}
return BST;
}
BinTree Insert( BinTree BST, ElementType X ){
if (BST==NULL){
BST=(struct TNode *)malloc(sizeof(struct TNode));
BST->Data=X;
BST->Left=BST->Right=NULL;
return BST;
}
if (X<BST->Data) BST->Left=Insert(BST->Left,X);
if (X>BST->Data) BST->Right=Insert(BST->Right,X);
return BST;
}
BinTree Delete( BinTree BST, ElementType X ){
Position Tmp;
if(!BST) printf("Not Found\n");
else {
if( X < BST->Data)
BST->Left = Delete(BST->Left, X);
else if(X > BST->Data )
BST->Right = Delete(BST->Right , X);
else {
if(BST->Left && BST->Right) {
Tmp=FindMin(BST->Right);
BST->Data = Tmp->Data;
BST->Right=Delete(BST->Right,BST->Data);
}else {
Tmp = BST;
if(!BST->Left) BST = BST->Right;
else if(!BST->Right) BST = BST->Left;
free(Tmp);
}
}
}
return BST;
}