#include<bits/stdc++.h>
#define ll long long
#define pp push_back
#define endl '\n'
#define all(x) x.begin(),x.end()
#define ld long double
#define PI acos(-1)
#define ones(x) __builtin_popcountll(x)
//#define int ll
using namespace std;
void Drakon() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
#ifdef Clion
freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
#endif
}
unsigned long long inf = 1e10;
const double EPS = 1e-6;
const int MOD = 1000000007, N = 200005, LOG = 25;
ll mul(const ll &a, const ll &b) {
return (a % MOD + MOD) * (b % MOD + MOD) % MOD;
}
ll add(const ll &a, const ll &b) {
return (a + b + 2 * MOD) % MOD;
}
ll pw(ll x, ll y) {
ll ret = 1;
while (y > 0) {
if (y % 2 == 0) {
x = mul(x, x);
y = y / 2;
} else {
ret = mul(ret, x);
y = y - 1;
}
}
return ret;
}
struct seg {
int mx = -1, sum = 0;
seg() {
}
seg(int mx, int sum) {
this->mx = mx;
this->sum = sum;
}
};
struct segtree {
vector<seg> values;
int size = 1, n;
void init(int nn) {
n = nn;
while (size < nn)size *= 2;
values.resize(2 * size, seg());
}
seg mrg(seg &a, seg &b) {
seg c;
c.mx = max(a.mx, b.mx);
c.sum = a.sum + b.sum;
return c;
}
void update(int i, int mx, int sum, int x, int lx, int rx) {
if (lx == rx) {
values[x].mx = mx;
values[x].sum = sum;
return;
}
int mid = (lx + rx) / 2;
if (i <= mid)
update(i, mx, sum, 2 * x + 1, lx, mid);
else
update(i, mx, sum, 2 * x + 2, mid + 1, rx);
values[x] = mrg(values[2 * x + 1], values[2 * x + 2]);
}
void update(int i, int mx, int sum) {
update(i, mx, sum, 0, 0, n - 1);
}
seg query(int l, int r, int x, int lx, int rx) {
if (l > rx || lx > r) {
return seg();
}
else if (lx >= l && rx <= r) {
return values[x];
}
int mid = (lx + rx) / 2;
seg s1 = query(l, r, 2 * x + 1, lx, mid);
seg s2 = query(l, r, 2 * x + 2, mid + 1, rx);
return mrg(s1, s2);
}
seg query(int l, int r) {
return query(l, r, 0, 0, n - 1);
}
};
void solve() {
int n, q;
cin >> n >> q;
vector<int> vec(n);
set<int> ind[n];
for (int i = 0; i < n; ++i) {
cin >> vec[i];
vec[i] --;
ind[vec[i]].insert(i);
}
segtree stF, stL;
stF.init(n + 5);
stL.init(n + 5);
multiset<int> mnFS;
multiset<int, greater<>> mxLS;
for (int i = 0; i < n; ++i) {
if(!ind[i].empty()) {
int first = *ind[i].begin();
int last = *ind[i].rbegin();
stF.update(first, last, ind[i].size() - 1);
stL.update(last, first, ind[i].size() - 1);
}
if(ind[i].size() > 1) {
mnFS.insert(*++ind[i].begin());
mxLS.insert(*--ind[i].rbegin());
}
}
while (q --) {
int op;
cin >> op;
if(op == 1) {
int t, i;
cin >> t >> i;
t--, i--;
int cur = vec[i];
if(!ind[cur].empty()) {
auto fi = ind[cur].begin();
auto la = ind[cur].rbegin();
stF.update(*fi, -1, 0);
stL.update(*la, -1, 0);
if(ind[cur].size() > 1) {
mnFS.erase(mnFS.find(*next(fi)));
mxLS.erase(mxLS.find(*prev(la)));
}
}
ind[cur].erase(i);
if(!ind[cur].empty()) {
auto fi = ind[cur].begin();
auto la = ind[cur].rbegin();
stF.update(*fi, *la, ind[cur].size() - 1);
stL.update(*la, *fi, ind[cur].size() - 1);
if(ind[cur].size() > 1) {
mnFS.insert(*next(fi));
mxLS.insert(*prev(la));
}
}
vec[i] = t;
cur = vec[i];
if(!ind[cur].empty()) {
auto fi = ind[cur].begin();
auto la = ind[cur].rbegin();
stF.update(*fi, -1, 0);
stL.update(*la, -1, 0);
if(ind[cur].size() > 1) {
mnFS.erase(mnFS.find(*next(fi)));
mxLS.erase(mxLS.find(*prev(la)));
}
}
ind[cur].insert(i);
if(!ind[cur].empty()) {
auto fi = ind[cur].begin();
auto la = ind[cur].rbegin();
stF.update(*fi, *la, ind[cur].size() - 1);
stL.update(*la, *fi, ind[cur].size() - 1);
if(ind[cur].size() > 1) {
mnFS.insert(*next(fi));
mxLS.insert(*prev(la));
}
}
}
else {
int t;
cin >> t;
t --;
if(ind[t].size() < 2) {
cout << "-1\n";
continue;
}
int l = *ind[t].begin();
int r = *ind[t].rbegin();
if((!mnFS.empty() && *mnFS.begin() < l)
|| (!mxLS.empty() && *mxLS.begin() > r)
|| (l && stF.query(0, l - 1).mx > r)) {
cout << "-1\n";
continue;
}
int ans = 0;
if(l) ans += stF.query(0, l - 1).sum;
if(r + 1 < n) ans += stL.query(r + 1, n - 1).sum;
cout << ans << endl;
}
}
}
signed main() {
Drakon();
int t = 1;
//cin >> t;
while (t--) {
solve();
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcHAgcHVzaF9iYWNrCiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSx4LmVuZCgpCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBQSSBhY29zKC0xKQojZGVmaW5lIG9uZXMoeCkgX19idWlsdGluX3BvcGNvdW50bGwoeCkKLy8jZGVmaW5lIGludCBsbAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgRHJha29uKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgY291dC50aWUobnVsbHB0cik7CiNpZmRlZiBDbGlvbgogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbiksIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7CiNlbmRpZgp9Cgp1bnNpZ25lZCBsb25nIGxvbmcgaW5mID0gMWUxMDsKY29uc3QgZG91YmxlIEVQUyA9IDFlLTY7CmNvbnN0IGludCBNT0QgPSAxMDAwMDAwMDA3LCBOID0gMjAwMDA1LCBMT0cgPSAyNTsKCmxsIG11bChjb25zdCBsbCAmYSwgY29uc3QgbGwgJmIpIHsKICAgIHJldHVybiAoYSAlIE1PRCArIE1PRCkgKiAoYiAlIE1PRCArIE1PRCkgJSBNT0Q7Cn0KCmxsIGFkZChjb25zdCBsbCAmYSwgY29uc3QgbGwgJmIpIHsKICAgIHJldHVybiAoYSArIGIgKyAyICogTU9EKSAlIE1PRDsKfQoKbGwgcHcobGwgeCwgbGwgeSkgewogICAgbGwgcmV0ID0gMTsKICAgIHdoaWxlICh5ID4gMCkgewogICAgICAgIGlmICh5ICUgMiA9PSAwKSB7CiAgICAgICAgICAgIHggPSBtdWwoeCwgeCk7CiAgICAgICAgICAgIHkgPSB5IC8gMjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXQgPSBtdWwocmV0LCB4KTsKICAgICAgICAgICAgeSA9IHkgLSAxOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXQ7Cn0KCnN0cnVjdCBzZWcgewogICAgaW50IG14ID0gLTEsIHN1bSA9IDA7CgogICAgc2VnKCkgewoKICAgIH0KCiAgICBzZWcoaW50IG14LCBpbnQgc3VtKSB7CiAgICAgICAgdGhpcy0+bXggPSBteDsKICAgICAgICB0aGlzLT5zdW0gPSBzdW07CiAgICB9Cn07CgpzdHJ1Y3Qgc2VndHJlZSB7CgogICAgdmVjdG9yPHNlZz4gdmFsdWVzOwogICAgaW50IHNpemUgPSAxLCBuOwoKICAgIHZvaWQgaW5pdChpbnQgbm4pIHsKICAgICAgICBuID0gbm47CiAgICAgICAgd2hpbGUgKHNpemUgPCBubilzaXplICo9IDI7CiAgICAgICAgdmFsdWVzLnJlc2l6ZSgyICogc2l6ZSwgc2VnKCkpOwogICAgfQoKICAgIHNlZyBtcmcoc2VnICZhLCBzZWcgJmIpIHsKICAgICAgICBzZWcgYzsKICAgICAgICBjLm14ID0gbWF4KGEubXgsIGIubXgpOwogICAgICAgIGMuc3VtID0gYS5zdW0gKyBiLnN1bTsKICAgICAgICByZXR1cm4gYzsKICAgIH0KCiAgICB2b2lkIHVwZGF0ZShpbnQgaSwgaW50IG14LCBpbnQgc3VtLCBpbnQgeCwgaW50IGx4LCBpbnQgcngpIHsKCiAgICAgICAgaWYgKGx4ID09IHJ4KSB7CiAgICAgICAgICAgIHZhbHVlc1t4XS5teCA9IG14OwogICAgICAgICAgICB2YWx1ZXNbeF0uc3VtID0gc3VtOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGludCBtaWQgPSAobHggKyByeCkgLyAyOwogICAgICAgIGlmIChpIDw9IG1pZCkKICAgICAgICAgICAgdXBkYXRlKGksIG14LCBzdW0sIDIgKiB4ICsgMSwgbHgsIG1pZCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICB1cGRhdGUoaSwgbXgsIHN1bSwgMiAqIHggKyAyLCBtaWQgKyAxLCByeCk7CiAgICAgICAgdmFsdWVzW3hdID0gbXJnKHZhbHVlc1syICogeCArIDFdLCB2YWx1ZXNbMiAqIHggKyAyXSk7CiAgICB9CgogICAgdm9pZCB1cGRhdGUoaW50IGksIGludCBteCwgaW50IHN1bSkgewogICAgICAgIHVwZGF0ZShpLCBteCwgc3VtLCAwLCAwLCBuIC0gMSk7CiAgICB9CgogICAgc2VnIHF1ZXJ5KGludCBsLCBpbnQgciwgaW50IHgsIGludCBseCwgaW50IHJ4KSB7CgogICAgICAgIGlmIChsID4gcnggfHwgbHggPiByKSB7CiAgICAgICAgICAgIHJldHVybiBzZWcoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAobHggPj0gbCAmJiByeCA8PSByKSB7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZXNbeF07CiAgICAgICAgfQoKICAgICAgICBpbnQgbWlkID0gKGx4ICsgcngpIC8gMjsKICAgICAgICBzZWcgczEgPSBxdWVyeShsLCByLCAyICogeCArIDEsIGx4LCBtaWQpOwogICAgICAgIHNlZyBzMiA9IHF1ZXJ5KGwsIHIsIDIgKiB4ICsgMiwgbWlkICsgMSwgcngpOwogICAgICAgIHJldHVybiBtcmcoczEsIHMyKTsKICAgIH0KCiAgICBzZWcgcXVlcnkoaW50IGwsIGludCByKSB7CiAgICAgICAgcmV0dXJuIHF1ZXJ5KGwsIHIsIDAsIDAsIG4gLSAxKTsKICAgIH0KCn07Cgp2b2lkIHNvbHZlKCkgewogICAgaW50IG4sIHE7CiAgICBjaW4gPj4gbiA+PiBxOwogICAgdmVjdG9yPGludD4gdmVjKG4pOwogICAgc2V0PGludD4gaW5kW25dOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBjaW4gPj4gdmVjW2ldOwogICAgICAgIHZlY1tpXSAtLTsKICAgICAgICBpbmRbdmVjW2ldXS5pbnNlcnQoaSk7CiAgICB9CgogICAgc2VndHJlZSBzdEYsIHN0TDsKICAgIHN0Ri5pbml0KG4gKyA1KTsKICAgIHN0TC5pbml0KG4gKyA1KTsKICAgIG11bHRpc2V0PGludD4gbW5GUzsKICAgIG11bHRpc2V0PGludCwgZ3JlYXRlcjw+PiBteExTOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBpZighaW5kW2ldLmVtcHR5KCkpIHsKICAgICAgICAgICAgaW50IGZpcnN0ID0gKmluZFtpXS5iZWdpbigpOwogICAgICAgICAgICBpbnQgbGFzdCA9ICppbmRbaV0ucmJlZ2luKCk7CiAgICAgICAgICAgIHN0Ri51cGRhdGUoZmlyc3QsIGxhc3QsIGluZFtpXS5zaXplKCkgLSAxKTsKICAgICAgICAgICAgc3RMLnVwZGF0ZShsYXN0LCBmaXJzdCwgaW5kW2ldLnNpemUoKSAtIDEpOwogICAgICAgIH0KICAgICAgICBpZihpbmRbaV0uc2l6ZSgpID4gMSkgewogICAgICAgICAgICBtbkZTLmluc2VydCgqKytpbmRbaV0uYmVnaW4oKSk7CiAgICAgICAgICAgIG14TFMuaW5zZXJ0KCotLWluZFtpXS5yYmVnaW4oKSk7CiAgICAgICAgfQogICAgfQoKICAgIHdoaWxlIChxIC0tKSB7CiAgICAgICAgaW50IG9wOwogICAgICAgIGNpbiA+PiBvcDsKICAgICAgICBpZihvcCA9PSAxKSB7CiAgICAgICAgICAgIGludCB0LCBpOwogICAgICAgICAgICBjaW4gPj4gdCA+PiBpOwogICAgICAgICAgICB0LS0sIGktLTsKCiAgICAgICAgICAgIGludCBjdXIgPSB2ZWNbaV07CgogICAgICAgICAgICBpZighaW5kW2N1cl0uZW1wdHkoKSkgewogICAgICAgICAgICAgICAgYXV0byBmaSA9IGluZFtjdXJdLmJlZ2luKCk7CiAgICAgICAgICAgICAgICBhdXRvIGxhID0gaW5kW2N1cl0ucmJlZ2luKCk7CgogICAgICAgICAgICAgICAgc3RGLnVwZGF0ZSgqZmksIC0xLCAwKTsKICAgICAgICAgICAgICAgIHN0TC51cGRhdGUoKmxhLCAtMSwgMCk7CiAgICAgICAgICAgICAgICBpZihpbmRbY3VyXS5zaXplKCkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgbW5GUy5lcmFzZShtbkZTLmZpbmQoKm5leHQoZmkpKSk7CiAgICAgICAgICAgICAgICAgICAgbXhMUy5lcmFzZShteExTLmZpbmQoKnByZXYobGEpKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5kW2N1cl0uZXJhc2UoaSk7CiAgICAgICAgICAgIGlmKCFpbmRbY3VyXS5lbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBhdXRvIGZpID0gaW5kW2N1cl0uYmVnaW4oKTsKICAgICAgICAgICAgICAgIGF1dG8gbGEgPSBpbmRbY3VyXS5yYmVnaW4oKTsKCiAgICAgICAgICAgICAgICBzdEYudXBkYXRlKCpmaSwgKmxhLCBpbmRbY3VyXS5zaXplKCkgLSAxKTsKICAgICAgICAgICAgICAgIHN0TC51cGRhdGUoKmxhLCAqZmksIGluZFtjdXJdLnNpemUoKSAtIDEpOwogICAgICAgICAgICAgICAgaWYoaW5kW2N1cl0uc2l6ZSgpID4gMSkgewogICAgICAgICAgICAgICAgICAgIG1uRlMuaW5zZXJ0KCpuZXh0KGZpKSk7CiAgICAgICAgICAgICAgICAgICAgbXhMUy5pbnNlcnQoKnByZXYobGEpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmVjW2ldID0gdDsKICAgICAgICAgICAgY3VyID0gdmVjW2ldOwoKICAgICAgICAgICAgaWYoIWluZFtjdXJdLmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgIGF1dG8gZmkgPSBpbmRbY3VyXS5iZWdpbigpOwogICAgICAgICAgICAgICAgYXV0byBsYSA9IGluZFtjdXJdLnJiZWdpbigpOwoKICAgICAgICAgICAgICAgIHN0Ri51cGRhdGUoKmZpLCAtMSwgMCk7CiAgICAgICAgICAgICAgICBzdEwudXBkYXRlKCpsYSwgLTEsIDApOwogICAgICAgICAgICAgICAgaWYoaW5kW2N1cl0uc2l6ZSgpID4gMSkgewogICAgICAgICAgICAgICAgICAgIG1uRlMuZXJhc2UobW5GUy5maW5kKCpuZXh0KGZpKSkpOwogICAgICAgICAgICAgICAgICAgIG14TFMuZXJhc2UobXhMUy5maW5kKCpwcmV2KGxhKSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGluZFtjdXJdLmluc2VydChpKTsKICAgICAgICAgICAgaWYoIWluZFtjdXJdLmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgIGF1dG8gZmkgPSBpbmRbY3VyXS5iZWdpbigpOwogICAgICAgICAgICAgICAgYXV0byBsYSA9IGluZFtjdXJdLnJiZWdpbigpOwoKICAgICAgICAgICAgICAgIHN0Ri51cGRhdGUoKmZpLCAqbGEsIGluZFtjdXJdLnNpemUoKSAtIDEpOwogICAgICAgICAgICAgICAgc3RMLnVwZGF0ZSgqbGEsICpmaSwgaW5kW2N1cl0uc2l6ZSgpIC0gMSk7CiAgICAgICAgICAgICAgICBpZihpbmRbY3VyXS5zaXplKCkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgbW5GUy5pbnNlcnQoKm5leHQoZmkpKTsKICAgICAgICAgICAgICAgICAgICBteExTLmluc2VydCgqcHJldihsYSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpbnQgdDsKICAgICAgICAgICAgY2luID4+IHQ7CiAgICAgICAgICAgIHQgLS07CiAgICAgICAgICAgIGlmKGluZFt0XS5zaXplKCkgPCAyKSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICItMVxuIjsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGludCBsID0gKmluZFt0XS5iZWdpbigpOwogICAgICAgICAgICBpbnQgciA9ICppbmRbdF0ucmJlZ2luKCk7CiAgICAgICAgICAgIGlmKCghbW5GUy5lbXB0eSgpICYmICptbkZTLmJlZ2luKCkgPCBsKQogICAgICAgICAgICB8fCAoIW14TFMuZW1wdHkoKSAmJiAqbXhMUy5iZWdpbigpID4gcikKICAgICAgICAgICAgfHwgKGwgJiYgc3RGLnF1ZXJ5KDAsIGwgLSAxKS5teCA+IHIpKSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICItMVxuIjsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGludCBhbnMgPSAwOwogICAgICAgICAgICBpZihsKSBhbnMgKz0gc3RGLnF1ZXJ5KDAsIGwgLSAxKS5zdW07CiAgICAgICAgICAgIGlmKHIgKyAxIDwgbikgYW5zICs9IHN0TC5xdWVyeShyICsgMSwgbiAtIDEpLnN1bTsKICAgICAgICAgICAgY291dCA8PCBhbnMgPDwgZW5kbDsKICAgICAgICB9CiAgICB9Cgp9CgpzaWduZWQgbWFpbigpIHsKICAgIERyYWtvbigpOwogICAgaW50IHQgPSAxOwogICAgLy9jaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQp9