#include <iostream>
#include <algorithm>
using namespace std;

int par[100010],r[100010]={};
int root(int a);
void unite(int a,int b);

int main(void){
  int n,m,i,p[100010],x,y,ans=0;
  cin >> n >> m;
  for (i=1;i<=n;i++) cin >> p[i];
  for (i=0;i<m;i++){
    cin >> x >> y;
    if (root(x)!=root(y)) unite(x,y);
  }
  for (i=1;i<=n;i++) if (root(i)==root(p[i])) ans++;
  cout << ans << endl;
  return 0;
}

int root(int a){
  if (par[par[a]]==par[a]) return a;
  return par[a]=root(par[a]);
}

void unite(int a,int b){
  a=root(a);
  b=root(b);
  if (a==b) return;
  if (r[a]<r[b]){
    par[a]=b;
    r[b]++;
  }else{
    par[b]=a;
    r[a]++;
  }
  return;
}