#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define FOR(i, a, b) for (int i = (a); i <= (b); i ++)
#define fi first
#define se second
#define endl '\n'
const int N = 2e5 + 5;
int n, q;
int kem[N], rd[N], id[N];
int main()
{
cin >> n >> q;
int gv, ht;
FOR(i, 1, n)
{
cin >> id[i];
if (id[i] == 0) ht = i;
}
FOR(i, 1, q)
{
int t;
cin >> t;
if (t == 1)
{
int a, b;
cin >> a>> b;
if (id[a] < 2)
{
rd[i] = b;
kem[b] ++;
if (id[a] == 1 && id[b] == 2)
{
kem[ht] ++;
rd[i] = - b - 1;
}
}
else
{
if (id[b] != 1)
{
kem[b] ++;
rd[i] = b;
}
else
{
gv ++;
kem[ht] ++;
rd[i] = 0;
}
}
}
else if (t == 2)
{
int a, x;
cin >> a >> x;
if (id[a] == 0)
{
if (rd[x] <= 0 || rd[x] == a) kem[a] --;
}
else if (id[a] == 2)
{
if (rd[x] == a || rd[x] == - a - 1) kem[a] --;
}
else
{
if (rd[x] == 0)
{
gv --;
rd[x] = -1;
}
else if (rd[x] == a) kem[a] --;
}
}
else
{
int a;
cin >> a;
if (id[a] == 1) cout << kem[a] + gv << endl;
else cout << kem[a] << endl;
}
}
return 0;
}
//7 22
//1 0 1 1 2 2 2
//1 1 2
//2 1 1
//1 2 3
//1 2 1
//1 1 3
//1 4 5
//1 2 6
//1 3 7
//1 7 6
//1 6 1
//1 5 4
//2 2 11
//2 3 11
//2 2 8
//2 3 6
//3 3
//2 2 6
//2 6 6
//2 6 9
//2 3 7
//2 3 5
//2 2 1
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIEZPUihpLCBhLCBiKSBmb3IgKGludCBpID0gKGEpOyBpIDw9IChiKTsgaSArKykKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGVuZGwgJ1xuJwoKY29uc3QgaW50IE4gPSAyZTUgKyA1OwoKaW50IG4sIHE7CmludCBrZW1bTl0sIHJkW05dLCBpZFtOXTsKCmludCBtYWluKCkKewogICAKICAgIGNpbiA+PiBuID4+IHE7CgogICAgaW50IGd2LCBodDsKCiAgICBGT1IoaSwgMSwgbikKICAgIHsKICAgICAgICBjaW4gPj4gaWRbaV07CiAgICAgICAgaWYgKGlkW2ldID09IDApIGh0ID0gaTsKICAgIH0KCiAgICBGT1IoaSwgMSwgcSkKICAgIHsKICAgICAgICBpbnQgdDsKICAgICAgICBjaW4gPj4gdDsKCiAgICAgICAgaWYgKHQgPT0gMSkKICAgICAgICB7CiAgICAgICAgICAgIGludCBhLCBiOwogICAgICAgICAgICBjaW4gPj4gYT4+IGI7CgogICAgICAgICAgICBpZiAoaWRbYV0gPCAyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZFtpXSA9IGI7CiAgICAgICAgICAgICAgICBrZW1bYl0gKys7CiAgICAgICAgICAgICAgICBpZiAoaWRbYV0gPT0gMSAmJiBpZFtiXSA9PSAyKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGtlbVtodF0gKys7CiAgICAgICAgICAgICAgICAgICAgcmRbaV0gPSAtIGIgLSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGlkW2JdICE9IDEpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAga2VtW2JdICsrOwogICAgICAgICAgICAgICAgICAgIHJkW2ldID0gYjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBndiArKzsKICAgICAgICAgICAgICAgICAgICBrZW1baHRdICsrOwogICAgICAgICAgICAgICAgICAgIHJkW2ldID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmICh0ID09IDIpCiAgICAgICAgewogICAgICAgICAgICBpbnQgYSwgeDsKICAgICAgICAgICAgY2luID4+IGEgPj4geDsKCiAgICAgICAgICAgIGlmIChpZFthXSA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAocmRbeF0gPD0gMCB8fCByZFt4XSA9PSBhKSBrZW1bYV0gLS07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoaWRbYV0gPT0gMikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKHJkW3hdID09IGEgfHwgcmRbeF0gPT0gLSBhIC0gMSkga2VtW2FdIC0tOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKHJkW3hdID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZ3YgLS07CiAgICAgICAgICAgICAgICAgICAgcmRbeF0gPSAtMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJkW3hdID09IGEpIGtlbVthXSAtLTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBpbnQgYTsKICAgICAgICAgICAgY2luID4+IGE7CiAgICAgICAgICAgIGlmIChpZFthXSA9PSAxKSBjb3V0IDw8IGtlbVthXSArIGd2IDw8IGVuZGw7CiAgICAgICAgICAgIGVsc2UgY291dCA8PCBrZW1bYV0gPDwgZW5kbDsKICAgICAgICB9CgogICAgfQogICAgcmV0dXJuIDA7Cn0KCi8vNyAyMgovLzEgMCAxIDEgMiAyIDIKLy8xIDEgMgovLzIgMSAxCi8vMSAyIDMKLy8xIDIgMQovLzEgMSAzCi8vMSA0IDUKLy8xIDIgNgovLzEgMyA3Ci8vMSA3IDYKLy8xIDYgMQovLzEgNSA0Ci8vMiAyIDExCi8vMiAzIDExCi8vMiAyIDgKLy8yIDMgNgovLzMgMwovLzIgMiA2Ci8vMiA2IDYKLy8yIDYgOQovLzIgMyA3Ci8vMiAzIDUKLy8yIDIgMQoK