#include <bits/stdc++.h>
using namespace std;
vector<vector<int>>adj;
vector<int>comp,compSize;

void dfs(int u ,int id){
	
	comp[u]=id;
	compSize[id]++;
	
	for(int v : adj[u]){
		if(comp[v] == -1)dfs(v,id);
	}
}
int spread(int n , vector<int>&from , vector<int>&to,vector<int>&mal){
	adj.assign(n+1,{});
	for(int i = 0 ; i < from.size();i++){
		adj[from[i]].push_back(to[i]);
		adj[to[i]].push_back(from[i]);
	}

	 comp.assign(n + 1, -1);
        compSize.assign(n + 1, 0);
        	int id = 0;
	for(int i = 1 ; i <=n;i++){
		if(comp[i]==-1){
			dfs(i,id);
			id++;
		}
	}
	
	vector<int>inf(id,0);
	for(int i = 1; i<=n;i++){
		if(mal[i]== 1)inf[comp[i]]++;
	}
	int ans = -1;
	int maxS = -1;
	for(int i = 0;i <= n ;i++){
		if(mal[i]==0)continue;
		
		int c =  comp[i];
		
		if(inf[c] == 1){
			if(comp[c] > maxS ){
				maxS = comp[c];
				ans = i;
			}else if(comp[c] == maxS && i < ans){
				ans = i;
			}
		}
	if(ans == -1){
		for(int i = 1;i<=n;i++){
			if(mal[i]==1)return i;
		}
	}
	}
	
	
	return ans;
}
int main() {
	int n ,m;
	cin>>n>>m;
	vector<int>from(m),to(m);
	
	for(int i = 0 ;i < m ;i++){
		cin>>from[i];
	}
	
	for(int i = 0;i < m ;i++){
		cin>>to[i];
	}
	
	vector<int>mal(n+1);
	
	for(int i= 1;i<=n;i++){
		cin>>mal[i];
	}
	cout<<spread(n,from,to,mal);
}