#include <iostream>
using namespace std;
const int N = 1e6 + 10;
int n, m, i;
int a[N], b[N];
int main(){
scanf("%d%d", &n, &m);
for(int i = 0; i < n; i++){
scanf("%d", &a[i]);
}
for(int i = 0; i < m; i++){
scanf("%d", &b[i]);
}
for(int j = 0; j < m; j++){
if(i < n && a[i] == b[j]) i++;
}
if(i == n) puts("Yes");
else puts("No");
return 0;
}
#include <iostream>
using namespace std;
const int N = 1e6 + 10;
int n, m, i;
int a[N], b[N];
int main(){
scanf("%d%d", &n, &m);
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
for(int i = 0; i < m; i++)
scanf("%d", &b[i]);
for(int j = 0; j < m; j++)
if(i < n && a[i] == b[j]) i++;
//为什么 i < n?
//因为数组是全局,初始都为零 如果不限制边界, 测试数据 a数组1 b数组 1 0 会越界吧,j计数为2跳出输出
if(i == n) puts("Yes");
else puts("No");
return 0;
}