#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
const int BLOCK = 320;
int n, q;
int a[MAXN], lazy[BLOCK], belong[MAXN], S, so_block;
vector<pair<int, int>> block[BLOCK];
void rebuild(int b) {
block[b].clear();
int l = b * S;
int r = min(n, (b + 1) * S - 1);
for (int i = l; i <= r; ++i)
block[b].emplace_back(a[i], i);
sort(block[b].begin(), block[b].end());
}
void update(int l, int r, int x) {
int bl = belong[l], br = belong[r];
if (bl == br) {
for (int i = l; i <= r; ++i) a[i] += x;
rebuild(bl);
} else {
for (int i = l; i <= (bl + 1) * S - 1; ++i) a[i] += x;
for (int i = br * S; i <= r; ++i) a[i] += x;
rebuild(bl);
rebuild(br);
for (int b = bl + 1; b < br; ++b)
lazy[b] += x;
}
}
int query(int x) {
int trai = n + 1, phai = -1;
for (int b = 0; b < so_block; ++b) {
int val = x - lazy[b];
auto &v = block[b];
auto it = lower_bound(v.begin(), v.end(), make_pair(val, -1));
while (it != v.end() && it->first == val) {
trai = min(trai, it->second);
phai = max(phai, it->second);
++it;
}
}
if (phai == -1) return -1;
return phai - trai;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> q;
S = sqrt(n) + 1;
so_block = (n + S - 1) / S;
for (int i = 0; i < n; ++i) {
cin >> a[i];
belong[i] = i / S;
}
for (int b = 0; b < so_block; ++b)
rebuild(b);
while (q--) {
int type;
cin >> type;
if (type == 1) {
int l, r, x;
cin >> l >> r >> x;
--l; --r;
update(l, r, x);
} else {
int x;
cin >> x;
cout << query(x) << '\n';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYTiA9IDFlNSArIDU7CmNvbnN0IGludCBCTE9DSyA9IDMyMDsKCmludCBuLCBxOwppbnQgYVtNQVhOXSwgbGF6eVtCTE9DS10sIGJlbG9uZ1tNQVhOXSwgUywgc29fYmxvY2s7CnZlY3RvcjxwYWlyPGludCwgaW50Pj4gYmxvY2tbQkxPQ0tdOwoKdm9pZCByZWJ1aWxkKGludCBiKSB7CiAgICBibG9ja1tiXS5jbGVhcigpOwogICAgaW50IGwgPSBiICogUzsKICAgIGludCByID0gbWluKG4sIChiICsgMSkgKiBTIC0gMSk7CiAgICBmb3IgKGludCBpID0gbDsgaSA8PSByOyArK2kpCiAgICAgICAgYmxvY2tbYl0uZW1wbGFjZV9iYWNrKGFbaV0sIGkpOwogICAgc29ydChibG9ja1tiXS5iZWdpbigpLCBibG9ja1tiXS5lbmQoKSk7Cn0KCnZvaWQgdXBkYXRlKGludCBsLCBpbnQgciwgaW50IHgpIHsKICAgIGludCBibCA9IGJlbG9uZ1tsXSwgYnIgPSBiZWxvbmdbcl07CiAgICBpZiAoYmwgPT0gYnIpIHsKICAgICAgICBmb3IgKGludCBpID0gbDsgaSA8PSByOyArK2kpIGFbaV0gKz0geDsKICAgICAgICByZWJ1aWxkKGJsKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZm9yIChpbnQgaSA9IGw7IGkgPD0gKGJsICsgMSkgKiBTIC0gMTsgKytpKSBhW2ldICs9IHg7CiAgICAgICAgZm9yIChpbnQgaSA9IGJyICogUzsgaSA8PSByOyArK2kpIGFbaV0gKz0geDsKICAgICAgICByZWJ1aWxkKGJsKTsKICAgICAgICByZWJ1aWxkKGJyKTsKICAgICAgICBmb3IgKGludCBiID0gYmwgKyAxOyBiIDwgYnI7ICsrYikKICAgICAgICAgICAgbGF6eVtiXSArPSB4OwogICAgfQp9CgppbnQgcXVlcnkoaW50IHgpIHsKICAgIGludCB0cmFpID0gbiArIDEsIHBoYWkgPSAtMTsKICAgIGZvciAoaW50IGIgPSAwOyBiIDwgc29fYmxvY2s7ICsrYikgewogICAgICAgIGludCB2YWwgPSB4IC0gbGF6eVtiXTsKICAgICAgICBhdXRvICZ2ID0gYmxvY2tbYl07CiAgICAgICAgYXV0byBpdCA9IGxvd2VyX2JvdW5kKHYuYmVnaW4oKSwgdi5lbmQoKSwgbWFrZV9wYWlyKHZhbCwgLTEpKTsKICAgICAgICB3aGlsZSAoaXQgIT0gdi5lbmQoKSAmJiBpdC0+Zmlyc3QgPT0gdmFsKSB7CiAgICAgICAgICAgIHRyYWkgPSBtaW4odHJhaSwgaXQtPnNlY29uZCk7CiAgICAgICAgICAgIHBoYWkgPSBtYXgocGhhaSwgaXQtPnNlY29uZCk7CiAgICAgICAgICAgICsraXQ7CiAgICAgICAgfQogICAgfQogICAgaWYgKHBoYWkgPT0gLTEpIHJldHVybiAtMTsKICAgIHJldHVybiBwaGFpIC0gdHJhaTsKfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgY2luID4+IG4gPj4gcTsKICAgIFMgPSBzcXJ0KG4pICsgMTsKICAgIHNvX2Jsb2NrID0gKG4gKyBTIC0gMSkgLyBTOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgY2luID4+IGFbaV07CiAgICAgICAgYmVsb25nW2ldID0gaSAvIFM7CiAgICB9CiAgICBmb3IgKGludCBiID0gMDsgYiA8IHNvX2Jsb2NrOyArK2IpCiAgICAgICAgcmVidWlsZChiKTsKCiAgICB3aGlsZSAocS0tKSB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgY2luID4+IHR5cGU7CiAgICAgICAgaWYgKHR5cGUgPT0gMSkgewogICAgICAgICAgICBpbnQgbCwgciwgeDsKICAgICAgICAgICAgY2luID4+IGwgPj4gciA+PiB4OwogICAgICAgICAgICAtLWw7IC0tcjsKICAgICAgICAgICAgdXBkYXRlKGwsIHIsIHgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGludCB4OwogICAgICAgICAgICBjaW4gPj4geDsKICAgICAgICAgICAgY291dCA8PCBxdWVyeSh4KSA8PCAnXG4nOwogICAgICAgIH0KICAgIH0KfQ==