# 判断子序列 - 双指针

#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;
}