// ~~ icebear ~~
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
typedef pair<int, ii> iii;
template<class T>
bool minimize(T &a, const T &b) {
if (a > b) return a = b, true;
return false;
}
template<class T>
bool maximize(T &a, const T &b) {
if (a < b) return a = b, true;
return false;
}
#define FOR(i,a,b) for(int i=(a); i<=(b); ++i)
#define FORR(i,a,b) for(int i=(a); i>=(b); --i)
#define REP(i, n) for(int i=0; i<(n); ++i)
#define RED(i, n) for(int i=(n)-1; i>=0; --i)
#define MASK(i) (1LL << (i))
#define BIT(S, i) (((S) >> (i)) & 1)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define task "AILIME"
const int MOD = 1e9 + 7;
const int inf = 1e9 + 27092008;
const ll INF = 1e18 + 27092008;
const int N = 2e4 + 5;
const int BLOCK_SIZE = 188;
mt19937_64 rd(chrono::steady_clock::now().time_since_epoch().count());
int random(int l, int r) {
return l + rd() % (r - l + 1);
}
int n, q, B[N];
ll a[N], lazy[N / BLOCK_SIZE + 5];
unordered_map<ll, int> sus[N / BLOCK_SIZE + 1];
void update(int l, int r, int v) {
int blockL = B[l];
int blockR = B[r];
if (blockL + 1 >= blockR) {
FOR(i, l, r) {
sus[B[i]][a[i]]--;
a[i] += v;
sus[B[i]][a[i]]++;
}
return;
}
FOR(i, l, (blockL + 1) * BLOCK_SIZE - 1) {
sus[blockL - 1][a[i]]--;
a[i] += v;
sus[blockL - 1][a[i]]++;
}
FOR(i, blockR * BLOCK_SIZE, r) {
sus[blockR][a[i]]--;
a[i] += v;
sus[blockR][a[i]]++;
}
FOR(i, blockL + 1, blockR - 1) lazy[i] += v;
}
int freq(int l, int r, ll x) {
int blockL = B[l];
int blockR = B[r];
if (blockL + 1 >= blockR) {
int cnt = 0;
FOR(i, l, r) if (a[i] + lazy[B[i]] == x)
cnt++;
return cnt;
}
int cnt = 0;
FOR(i, l, (blockL + 1) * BLOCK_SIZE - 1) if (a[i] + lazy[blockL - 1] == x)
cnt++;
FOR(i, blockR * BLOCK_SIZE, r) if (a[i] + lazy[blockR] == x)
cnt++;
FOR(i, blockL + 1, blockR - 1) if (sus[i].find(x - lazy[i]) != sus[i].end())
cnt += sus[i][x - lazy[i]];
return cnt;
}
void init(void) {
cin >> n >> q;
REP(i, n) {
cin >> a[i];
B[i] = i / BLOCK_SIZE;
sus[B[i]][a[i]]++;
}
}
void process(void) {
int t, l, r, v;
while(q--) {
cin >> t >> l >> r;
l--; r--;
if (t == 1) {
cin >> v;
update(l, r, v);
} else {
bool ok = false;
REP(tries, 20) {
int i = random(l, r);
int c = freq(l, r, a[i] + lazy[B[i]]);
if (2 * c > (r - l + 1)) {
ok = true;
cout << a[i] + lazy[B[i]] << '\n';
break;
}
}
if (!ok) cout << "IMPOSSIBLE\n";
}
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int tc = 1;
// cin >> tc;
while(tc--) {
init();
process();
}
return 0;
}
Ly8gfn4gaWNlYmVhciB+fgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOwp0eXBlZGVmIHBhaXI8aW50LCBpaT4gaWlpOwoKdGVtcGxhdGU8Y2xhc3MgVD4KICAgIGJvb2wgbWluaW1pemUoVCAmYSwgY29uc3QgVCAmYikgewogICAgICAgIGlmIChhID4gYikgcmV0dXJuIGEgPSBiLCB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCnRlbXBsYXRlPGNsYXNzIFQ+CiAgICBib29sIG1heGltaXplKFQgJmEsIGNvbnN0IFQgJmIpIHsKICAgICAgICBpZiAoYSA8IGIpIHJldHVybiBhID0gYiwgdHJ1ZTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgojZGVmaW5lIEZPUihpLGEsYikgZm9yKGludCBpPShhKTsgaTw9KGIpOyArK2kpCiNkZWZpbmUgRk9SUihpLGEsYikgZm9yKGludCBpPShhKTsgaT49KGIpOyAtLWkpCiNkZWZpbmUgUkVQKGksIG4pIGZvcihpbnQgaT0wOyBpPChuKTsgKytpKQojZGVmaW5lIFJFRChpLCBuKSBmb3IoaW50IGk9KG4pLTE7IGk+PTA7IC0taSkKI2RlZmluZSBNQVNLKGkpICgxTEwgPDwgKGkpKQojZGVmaW5lIEJJVChTLCBpKSAoKChTKSA+PiAoaSkpICYgMSkKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKI2RlZmluZSB0YXNrICJBSUxJTUUiCgpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKY29uc3QgaW50IGluZiA9IDFlOSArIDI3MDkyMDA4Owpjb25zdCBsbCBJTkYgPSAxZTE4ICsgMjcwOTIwMDg7CmNvbnN0IGludCBOID0gMmU0ICsgNTsKY29uc3QgaW50IEJMT0NLX1NJWkUgPSAxODg7Cm10MTk5MzdfNjQgcmQoY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKS5jb3VudCgpKTsKaW50IHJhbmRvbShpbnQgbCwgaW50IHIpIHsKICAgIHJldHVybiBsICsgcmQoKSAlIChyIC0gbCArIDEpOwp9CmludCBuLCBxLCBCW05dOwpsbCBhW05dLCBsYXp5W04gLyBCTE9DS19TSVpFICsgNV07CnVub3JkZXJlZF9tYXA8bGwsIGludD4gc3VzW04gLyBCTE9DS19TSVpFICsgMV07Cgp2b2lkIHVwZGF0ZShpbnQgbCwgaW50IHIsIGludCB2KSB7CiAgICBpbnQgYmxvY2tMID0gQltsXTsKICAgIGludCBibG9ja1IgPSBCW3JdOwogICAgaWYgKGJsb2NrTCArIDEgPj0gYmxvY2tSKSB7CiAgICAgICAgRk9SKGksIGwsIHIpIHsKICAgICAgICAgICAgc3VzW0JbaV1dW2FbaV1dLS07CiAgICAgICAgICAgIGFbaV0gKz0gdjsKICAgICAgICAgICAgc3VzW0JbaV1dW2FbaV1dKys7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KICAgIEZPUihpLCBsLCAoYmxvY2tMICsgMSkgKiBCTE9DS19TSVpFIC0gMSkgewogICAgICAgIHN1c1tibG9ja0wgLSAxXVthW2ldXS0tOwogICAgICAgIGFbaV0gKz0gdjsKICAgICAgICBzdXNbYmxvY2tMIC0gMV1bYVtpXV0rKzsKICAgIH0KICAgIEZPUihpLCBibG9ja1IgKiBCTE9DS19TSVpFLCByKSB7CiAgICAgICAgc3VzW2Jsb2NrUl1bYVtpXV0tLTsKICAgICAgICBhW2ldICs9IHY7CiAgICAgICAgc3VzW2Jsb2NrUl1bYVtpXV0rKzsKICAgIH0KICAgIEZPUihpLCBibG9ja0wgKyAxLCBibG9ja1IgLSAxKSBsYXp5W2ldICs9IHY7Cn0KCmludCBmcmVxKGludCBsLCBpbnQgciwgbGwgeCkgewogICAgaW50IGJsb2NrTCA9IEJbbF07CiAgICBpbnQgYmxvY2tSID0gQltyXTsKICAgIGlmIChibG9ja0wgKyAxID49IGJsb2NrUikgewogICAgICAgIGludCBjbnQgPSAwOwogICAgICAgIEZPUihpLCBsLCByKSBpZiAoYVtpXSArIGxhenlbQltpXV0gPT0geCkKICAgICAgICAgICAgY250Kys7CiAgICAgICAgcmV0dXJuIGNudDsKICAgIH0KICAgIGludCBjbnQgPSAwOwogICAgRk9SKGksIGwsIChibG9ja0wgKyAxKSAqIEJMT0NLX1NJWkUgLSAxKSBpZiAoYVtpXSArIGxhenlbYmxvY2tMIC0gMV0gPT0geCkKICAgICAgICBjbnQrKzsKICAgIEZPUihpLCBibG9ja1IgKiBCTE9DS19TSVpFLCByKSBpZiAoYVtpXSArIGxhenlbYmxvY2tSXSA9PSB4KQogICAgICAgIGNudCsrOwogICAgRk9SKGksIGJsb2NrTCArIDEsIGJsb2NrUiAtIDEpIGlmIChzdXNbaV0uZmluZCh4IC0gbGF6eVtpXSkgIT0gc3VzW2ldLmVuZCgpKQogICAgICAgIGNudCArPSBzdXNbaV1beCAtIGxhenlbaV1dOwogICAgcmV0dXJuIGNudDsKfQoKdm9pZCBpbml0KHZvaWQpIHsKICAgIGNpbiA+PiBuID4+IHE7CiAgICBSRVAoaSwgbikgewogICAgICAgIGNpbiA+PiBhW2ldOwogICAgICAgIEJbaV0gPSBpIC8gQkxPQ0tfU0laRTsKICAgICAgICBzdXNbQltpXV1bYVtpXV0rKzsKICAgIH0KfQoKdm9pZCBwcm9jZXNzKHZvaWQpIHsKICAgIGludCB0LCBsLCByLCB2OwogICAgd2hpbGUocS0tKSB7CiAgICAgICAgY2luID4+IHQgPj4gbCA+PiByOwogICAgICAgIGwtLTsgci0tOwogICAgICAgIGlmICh0ID09IDEpIHsKICAgICAgICAgICAgY2luID4+IHY7CiAgICAgICAgICAgIHVwZGF0ZShsLCByLCB2KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBib29sIG9rID0gZmFsc2U7CiAgICAgICAgICAgIFJFUCh0cmllcywgMjApIHsKICAgICAgICAgICAgICAgIGludCBpID0gcmFuZG9tKGwsIHIpOwogICAgICAgICAgICAgICAgaW50IGMgPSBmcmVxKGwsIHIsIGFbaV0gKyBsYXp5W0JbaV1dKTsKICAgICAgICAgICAgICAgIGlmICgyICogYyA+IChyIC0gbCArIDEpKSB7CiAgICAgICAgICAgICAgICAgICAgb2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgYVtpXSArIGxhenlbQltpXV0gPDwgJ1xuJzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIW9rKSBjb3V0IDw8ICJJTVBPU1NJQkxFXG4iOwogICAgICAgIH0KICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4odGFzayIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4odGFzayIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3Blbih0YXNrIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBpbnQgdGMgPSAxOwovLyAgICBjaW4gPj4gdGM7CiAgICB3aGlsZSh0Yy0tKSB7CiAgICAgICAgaW5pdCgpOwogICAgICAgIHByb2Nlc3MoKTsKICAgIH0KICAgIHJldHVybiAwOwp9Cgo=