#include<bits/stdc++.h>
using namespace std;
#define int long long
void scc_dfs(const auto&g,auto&v,auto&s,int i){
if(v[i]){
return;
}
v[i]=1;
for(int j:g[i]){
scc_dfs(g,v,s,j);
}
s.push_back(i);
}
int scc(const auto&g,const auto&gg,auto&c){
int n=g.size();
vector<int>v,s;
v.assign(n,0);
for(int i=0;i<n;i++){
scc_dfs(g,v,s,i);
}
v.assign(n,0);
for(int i=n-1;i>=0;i--){
if(v[s[i]]){
continue;
}
c.emplace_back();
scc_dfs(gg,v,c.back(),s[i]);
}
return c.size();
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N,K;
cin>>N>>K;
vector<int>v(N);
for(int i=0;i<N;i++){
cin>>v[i];
}
int M;
cin>>M;
vector<vector<int>>g(K+1),gg(K+1);
for(int i=0;i<M;i++){
int a,b;
cin>>a>>b;
g[a].push_back(b);
gg[b].push_back(a);
}
vector<vector<int>>c;
int O=scc(g,gg,c);
vector<int>cc(K+1);
for(int i=0;i<O;i++){
for(int j:c[i]){
cc[j]=i;
}
}
vector<vector<int>>h(O);
for(int i=0;i<O;i++){
for(int j:c[i]){
for(int k:g[j]){
int l=cc[k];
if(l!=i){
h[i].push_back(l);
}
}
}
}
for(int i=0;i<O;i++){
sort(h[i].begin(),h[i].end());
h[i].erase(unique(h[i].begin(),h[i].end()),h[i].end());
}
for(int i=1;i<=K;i++){
sort(g[i].begin(),g[i].end());
}
int ans=2;
int last=cc[v[0]];
for(int i=0;i+1<N;i++){
if(binary_search(g[v[i]].begin(),g[v[i]].end(),v[i+1])){
ans+=2;
continue;
}
int next=cc[v[i+1]];
auto dfs=[&](auto self,int i)->int{
if(i==next){
last=i;
return 1;
}
for(int j:h[i]){
if(self(self,j)){
return 1;
}
}
return 0;
};
if(!dfs(dfs,last)){
break;
}
ans+=1;
}
cout<<ans<<'\n';
return 0;
}