#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
const int inf = INT_MAX;
int head[N], to[N], nxt[N], a[N], b[N], cnt, cnt1[N];
int n, m;
int vis[N];
bool vis1[N], flag;
void add(int a, int b){
to[++cnt] = b;
nxt[cnt] = head[a];
head[a] = cnt;
}
void dfs(int u, int fa){
if (fa == 0) ;
else if (vis[fa] == 1) vis[u] = 2;
else if (vis[fa] == 2) vis[u] = 1;
for (int i = head[u];i;i = nxt[i]){
int v = to[i];
if (v == fa) continue;
if (vis[v]){
if (fa == 0 && !cnt1[u]){
if (vis[v] == 1) vis[u] = 2;
else if (vis[v] == 2) vis[u] = 1;
}
if (vis[u] == vis[v]){
flag = 1;
return;
}
continue;
}
++cnt1[u];
dfs(v, u);
}
}
int main(){
cin >> n >> m;
for (int i = 1;i <= m;i++){
cin >> a[i];
}
for (int i = 1;i <= m;i++){
cin >> b[i];
add(a[i], b[i]);
if (a[i] == b[i]){
cout << "No";
return 0;
}
}
for (int i = 1;i <= n;i++){
if (vis[i]) continue;
vis[i] = 1;
dfs(i, 0);
}
if (!flag) cout << "Yes";
else cout << "No";
return 0;
}