#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 1e5 + 15;
const int oo = 1e9 + 7;
int N, Q;
int A[MAXN];
struct Dosu {
int par[MAXN], sz[MAXN];
map<int, int> m[MAXN];
vector<int> g[MAXN];
void INIT() {
for (int i = 1; i <= N; i++) {
sz[i] = 1;
par[i] = i;
g[i].push_back(A[i]);
m[i][A[i]] = 1;
}
}
int find_set(int u) {
return (par[u] == u ? u : par[u] = find_set(par[u]));
}
void union_set(int u, int v) {
u = find_set(u), v = find_set(v);
if (u == v) return;
if (sz[u] < sz[v]) swap(u, v);
par[v] = par[u];
sz[u] += sz[v];
for (auto E : g[v]) {
m[u][E]++;
g[u].push_back(E);
}
}
} DSU;
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> N >> Q;
for (int i = 1; i <= N; i++) cin >> A[i];
DSU.INIT();
for (int i = 1; i <= Q; i++) {
int t, a, b;
cin >> t >> a >> b;
if (t == 1) DSU.union_set(a, b);
else {
cout << DSU.m[DSU.find_set(a)][b] << '\n';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwoKY29uc3QgaW50IE1BWE4gPSAxZTUgKyAxNTsKY29uc3QgaW50IG9vICAgPSAxZTkgKyA3OwoKaW50IE4sIFE7CmludCBBW01BWE5dOwoKc3RydWN0IERvc3UgewogICAgaW50IHBhcltNQVhOXSwgc3pbTUFYTl07CiAgICBtYXA8aW50LCBpbnQ+IG1bTUFYTl07CiAgICB2ZWN0b3I8aW50PiBnW01BWE5dOwoKICAgIHZvaWQgSU5JVCgpIHsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBOOyBpKyspIHsKICAgICAgICAgICAgc3pbaV0gPSAxOwogICAgICAgICAgICBwYXJbaV0gPSBpOwogICAgICAgICAgICBnW2ldLnB1c2hfYmFjayhBW2ldKTsKICAgICAgICAgICAgbVtpXVtBW2ldXSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgIGludCBmaW5kX3NldChpbnQgdSkgewogICAgICAgIHJldHVybiAocGFyW3VdID09IHUgPyB1IDogcGFyW3VdID0gZmluZF9zZXQocGFyW3VdKSk7CiAgICB9CgogICAgdm9pZCB1bmlvbl9zZXQoaW50IHUsIGludCB2KSB7CiAgICAgICAgdSA9IGZpbmRfc2V0KHUpLCB2ID0gZmluZF9zZXQodik7CiAgICAgICAgaWYgKHUgPT0gdikgcmV0dXJuOwogICAgICAgIGlmIChzelt1XSA8IHN6W3ZdKSBzd2FwKHUsIHYpOwogICAgICAgIHBhclt2XSA9IHBhclt1XTsKICAgICAgICBzelt1XSArPSBzelt2XTsKICAgICAgICBmb3IgKGF1dG8gRSA6IGdbdl0pIHsKICAgICAgICAgICAgbVt1XVtFXSsrOwogICAgICAgICAgICBnW3VdLnB1c2hfYmFjayhFKTsKICAgICAgICB9CiAgICB9Cn0gRFNVOwoKc2lnbmVkIG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICAKCiAgICBjaW4gPj4gTiA+PiBROwoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IE47IGkrKykgY2luID4+IEFbaV07CgogICAgRFNVLklOSVQoKTsKCgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gUTsgaSsrKSB7CiAgICAgICAgaW50IHQsIGEsIGI7CiAgICAgICAgY2luID4+IHQgPj4gYSA+PiBiOwogICAgICAgIGlmICh0ID09IDEpIERTVS51bmlvbl9zZXQoYSwgYik7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGNvdXQgPDwgRFNVLm1bRFNVLmZpbmRfc2V0KGEpXVtiXSA8PCAnXG4nOwogICAgICAgIH0KICAgIH0KfQo=