import sys sys.setrecursionlimit(10**5) input=sys.stdin.readline import pypyjit pypyjit.set_param('max_unroll_recursion=-1') class SCCGraph: #ACLと同じ名前で実装したver. def __init__(self,n): self.n=n self.g=[[] for _ in range(self.n)] self.rg=[[] for _ in range(self.n)] def add_edge(self,u,v): self.g[u].append(v) self.rg[v].append(u) def _dfs(self,v,vis,order): vis[v]=True for nv in self.g[v]: if vis[nv]:continue self._dfs(nv,vis,order) order.append(v) return order def _dfs_stack(self,v,vis,order): stack=[(v,False)] while stack: v,done=stack.pop() if done: order.append(v) else: stack.append((v,True)) vis[v]=True for nv in self.g[v]: if vis[nv]:continue stack.append((nv,False)) return order def _rdfs(self,v,vis,group): vis[v]=True group.append(v) for nv in self.rg[v]: if vis[nv]:continue self._rdfs(nv,vis,group) return group def _rdfs_stack(self,v,vis,group): stack=[v] while stack: v=stack.pop() vis[v]=True group.append(v) for nv in self.rg[v]: if vis[nv]:continue stack.append(nv) return group def scc(self,dfs_stack=False,rdfs_stack=False): order=[] vis=[False]*self.n for v in range(self.n): if vis[v]:continue if dfs_stack:self._dfs_stack(v,vis,order) else:self._dfs(v,vis,order) order=order[::-1] groups=[] vis=[False]*self.n for v in order: if vis[v]:continue groups.append(self._rdfs_stack(v,vis,[]) if rdfs_stack else self._rdfs(v,vis,[])) return groups n,m=map(int,input().split()) scc=SCCGraph(n) for _ in range(m): u,v=map(lambda x:int(x)-1,input().split()) scc.add_edge(u,v) scc.add_edge(v,u) V=list(map(lambda x:int(x)-1,input().split())) V.sort() groups=scc.scc() for group in groups: group.sort() if group==V: print('No') exit() print('Yes')