//双端队列问题
#include<iostream>
#include<vector>
using namespace std;
const int N=1e5+10;
int n,k;
int insert_q[N];//输出序列
int delete_q[N];//删除序列
int curr_q[N];
int check(){
int hh=0,tt=-1;//队头,队尾的初始化
for(int i=0,j=0;i<n;i++){
curr_q[++tt]=insert_q[i];
while(hh<=tt){
if(curr_q[hh]==delete_q[j]) j++,hh++;//跟队头相等,删除队头
else if(curr_q[tt]==delete_q[j]) j++,tt--;//跟队尾相等,删除队尾
else break;
}
}
return hh>tt;
}
int main(){
cin>>n>>k;
for(int i=0;i<n;i++) cin>>insert_q[i];
while(k--){
for(int i=0;i<n;i++) cin>>delete_q[i];
if(check()) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
}