#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());
}
vector<int>w(O);
vector<int>l(O);
auto dfs=[&](auto self,int i)->void{
if(w[i]){
return;
}
w[i]=1;
for(int j:h[i]){
self(self,j);
l[j]=l[i]+1;
}
};
for(int i=0;i<O;i++){
dfs(dfs,i);
}
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]];
vector<int>w(O);
deque<int>q;
w[last]=1;
q.push_back(last);
while(!q.empty()&&last!=next){
int i=q.front();
q.pop_front();
for(int j:h[i]){
if(w[j]||l[j]>l[next]){
continue;
}
w[j]=1;
q.push_back(j);
if(j==next){
last=j;
break;
}
}
}
if(last!=next){
break;
}
ans+=1;
}
cout<<ans<<'\n';
return 0;
}