output_description: Print the maximum possible number of i such that p_i = i after operations.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N M
      p_1 p_2 .. p_N
      x_1 y_1
      x_2 y_2
      :
      x_M y_M
attempt: #ifndef BZ
  #pragma GCC optimize "-O3"
  #endif
  #include <bits/stdc++.h>
  
  #define FASTIO
  
  #ifdef FASTIO
  #define scanf abacaba
  #define printf abacaba
  #endif
  
  typedef long long ll;
  typedef long double ld;
  typedef unsigned long long ull;
  
  using namespace std;
  
  
  /*
  ll pw(ll a, ll b) {
  	ll ans = 1; while (b) {
  		while (!(b & 1)) b >>= 1, a = (a * a) % MOD;
  		ans = (ans * a) % MOD, --b;
  	} return ans;
  }
  */
  
  const int MAXN = 120000;
  
  int n, m;
  
  vector<int> eds[MAXN];
  int was[MAXN];
  set<int> v1, v2;
  int p[MAXN];
  
  void dfs1(int v) {
  	v1.insert(v);
  	v2.insert(p[v]);
  	was[v] = 1;
  	for (int u: eds[v])
  		if (!was[u])
  			dfs1(u);
  }
  
  int main() {
  #ifdef FASTIO
  	ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  #endif
  	cin >> n >> m;
  	for (int i = 0; i < n; ++i) {
  		cin >> p[i], --p[i];
  	}
  	for (int i = 0; i < m; ++i) {
  		int a, b;
  		cin >> a >> b;
  		--a, --b;
  		eds[a].push_back(b);
  		eds[b].push_back(a);
  	}
  	int ans = 0;
  	for (int i = 0; i < n; ++i) {
  		if (was[i])
  			continue;
  		v1.clear();
  		v2.clear();
  		dfs1(i);
  		for (int j: v1)
  			if (v2.count(j))
  				ans += 1;
  	}
  	cout << ans << "\n";
  	return 0;
  }
  
  
  
problem_description: Statement
  
  We have a permutation of the integers from 1 through N, p_1, p_2, .., p_N. We
  also have M pairs of two integers between 1 and N (inclusive), represented as
  (x_1,y_1), (x_2,y_2), .., (x_M,y_M). AtCoDeer the deer is going to perform the
  following operation on p as many times as desired so that the number of i (1 ≤
  i ≤ N) such that p_i = i is maximized:
  
    * Choose j such that 1 ≤ j ≤ M, and swap p_{x_j} and p_{y_j}.
  
  Find the maximum possible number of i such that p_i = i after operations.
samples: [{"input": "5 2\n    5 3 1 4 2\n    1 3\n    5 4", "output": "2\n    \n\nIf we perform the operation by choosing j=1, p becomes `1 3 5 4 2`, which is\noptimal, so the answer is 2.\n\n* * *"}, {"input": "3 2\n    3 2 1\n    1 2\n    2 3", "output": "3\n    \n\nIf we perform the operation by, for example, choosing j=1, j=2, j=1 in this\norder, p becomes `1 2 3`, which is obviously optimal. Note that we may choose\nthe same j any number of times.\n\n* * *"}, {"input": "10 8\n    5 3 6 8 7 10 9 1 2 4\n    3 1\n    4 1\n    5 9\n    2 5\n    6 5\n    3 5\n    8 9\n    7 9", "output": "8\n    \n\n* * *"}, {"input": "5 1\n    1 2 3 4 5\n    1 5", "output": "5\n    \n\nWe do not have to perform the operation."}]