#include <bits/stdc++.h>
using namespace std;
#define h0ang ios_base::sync_with_stdio(false); cin.tie(NULL);
#define ll long long
#define fi first
#define se second
#define ii pair<int, int>
#define iii pair<pair<int, int>, int>
#define pb push_back
#define TIME (1.0 * clock() / CLOCKS_PER_SEC)
const int MOD = 1e9 + 7;//998244353
const int maxN = 2e5 + 5;
int root[maxN], sz[maxN];
map<int, int> mp[maxN];
int get_root(int u){
if(root[u] == u) return u;
return root[u] = get_root(root[u]);
}
void union_(int u, int v){
u = get_root(u);
v = get_root(v);
if(u != v){
if(sz[u] < sz[v]) swap(u, v);
root[v] = u;
sz[u] += sz[v];
}
for(auto& it : mp[v]){
mp[u][it.first] += it.second;
}
}
int main(){
h0ang
// freopen("ontap.INP", "r", stdin);
// freopen("ontap.OUT", "w", stdout);
int n, q;
cin >> n >> q;
int a[n + 5];
for(int i=1; i <= n; i++){
cin >> a[i];
root[i] = i;
mp[i][a[i]] = 1;
}
for(int i=0; i < q; i++){
int x, u, vc;
cin >> x >> u >> vc;
if(x == 1){
union_(u, vc);
}
else{
int rut = get_root(u);
cout << mp[rut][vc] << endl;
}
}
cerr << "Time elapsed: " << TIME << "s" << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBoMGFuZyBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShOVUxMKTsKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGlpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgaWlpIHBhaXI8cGFpcjxpbnQsIGludD4sIGludD4KI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBUSU1FICgxLjAgKiBjbG9jaygpIC8gQ0xPQ0tTX1BFUl9TRUMpCgpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsvLzk5ODI0NDM1Mwpjb25zdCBpbnQgbWF4TiA9IDJlNSArIDU7CmludCByb290W21heE5dLCBzelttYXhOXTsKbWFwPGludCwgaW50PiBtcFttYXhOXTsKCmludCBnZXRfcm9vdChpbnQgdSl7CiAgICBpZihyb290W3VdID09IHUpIHJldHVybiB1OwogICAgcmV0dXJuIHJvb3RbdV0gPSBnZXRfcm9vdChyb290W3VdKTsKfQoKdm9pZCB1bmlvbl8oaW50IHUsIGludCB2KXsKICAgIHUgPSBnZXRfcm9vdCh1KTsKICAgIHYgPSBnZXRfcm9vdCh2KTsKICAgIGlmKHUgIT0gdil7CiAgICAgICAgaWYoc3pbdV0gPCBzelt2XSkgc3dhcCh1LCB2KTsKICAgICAgICByb290W3ZdID0gdTsKICAgICAgICBzelt1XSArPSBzelt2XTsKICAgIH0KICAgIGZvcihhdXRvJiBpdCA6IG1wW3ZdKXsKICAgICAgICBtcFt1XVtpdC5maXJzdF0gKz0gaXQuc2Vjb25kOwogICAgfQp9CgppbnQgbWFpbigpewogICAgaDBhbmcKLy8gICAgZnJlb3Blbigib250YXAuSU5QIiwgInIiLCBzdGRpbik7Ci8vICAgIGZyZW9wZW4oIm9udGFwLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgIGludCBuLCBxOwogICAgY2luID4+IG4gPj4gcTsKICAgIGludCBhW24gKyA1XTsKICAgIGZvcihpbnQgaT0xOyBpIDw9IG47IGkrKyl7CiAgICAgICAgY2luID4+IGFbaV07CiAgICAgICAgcm9vdFtpXSA9IGk7CiAgICAgICAgbXBbaV1bYVtpXV0gPSAxOwogICAgfQogICAgZm9yKGludCBpPTA7IGkgPCBxOyBpKyspewogICAgICAgIGludCB4LCB1LCB2YzsKICAgICAgICBjaW4gPj4geCA+PiB1ID4+IHZjOwogICAgICAgIGlmKHggPT0gMSl7CiAgICAgICAgICAgIHVuaW9uXyh1LCB2Yyk7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGludCBydXQgPSBnZXRfcm9vdCh1KTsKICAgICAgICAgICAgY291dCA8PCBtcFtydXRdW3ZjXSA8PCBlbmRsOwogICAgICAgIH0KICAgIH0KICAgIGNlcnIgPDwgIlRpbWUgZWxhcHNlZDogIiA8PCBUSU1FIDw8ICJzIiA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0K