#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define all(a,x) a.begin()+x, a.end()
#define pii pair<int, int>
using ll = long long;
const long long INF = 1e18;
const int inf = 1e9;
void read(){
#define TASK "DULIEU"
if(fopen(TASK ".INP", "r")){
freopen(TASK ".INP", "r", stdin);
//freopen(TASK ".OUT", "w", stdout);
}
}
int n, q;
vector<int> st;
void update(int id, int l, int r, int pos, int val){
if(l == r){
st[id] = val;
return;
}
int m = (l+r)/2;
if(pos <= m) update(2*id, l, m, pos, val);
else update(2*id+1, m+1, r, pos, val);
st[id] = max(st[2*id], st[2*id+1]);
}
int walk(int id, int l, int r, int u, int v, int val){
if(u > r || v < l || st[id] <= val) return -1;
if(l == r) return l;
int m = (l+r)/2;
int res = walk(2*id+1, m+1, r, u, v, val);
if(res != -1) return res;
return walk(2*id, l, m, u, v, val);
}
void solve(){
cin >> n >> q;
vector<multiset<int>> s(n+2);
st.assign(4*n+1, -inf);
while(q--){
int type; cin >> type;
if(type == 1){
int pos, val; cin >> pos >> val;
s[pos].insert(val);
int cur = *s[pos].rbegin();
update(1,1,n,pos,cur);
}
else if(type == 2){
int pos, val; cin>> pos >> val;
auto it = s[pos].find(val);
if(it != s[pos].end()){
s[pos].erase(it);
int cur = s[pos].empty() ? -inf : *s[pos].rbegin();
update(1,1,n,pos,cur);
}
}
else{
int l, r, val; cin >> l >> r >> val;
int ans = walk(1,1,n,l,r,val);
if(ans == -1) cout << "NONE" << '\n';
else cout << ans << '\n';
}
}
}
signed main(){
ios::sync_with_stdio(false);cin.tie(nullptr);
read();
int t=1; //cin >> t;
while(t--) solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgYWxsKGEseCkgYS5iZWdpbigpK3gsIGEuZW5kKCkKI2RlZmluZSBwaWkgcGFpcjxpbnQsIGludD4KdXNpbmcgbGwgPSBsb25nIGxvbmc7CmNvbnN0IGxvbmcgbG9uZyBJTkYgPSAxZTE4Owpjb25zdCBpbnQgaW5mID0gMWU5Owp2b2lkIHJlYWQoKXsKICAgI2RlZmluZSBUQVNLICJEVUxJRVUiCiAgICAgIGlmKGZvcGVuKFRBU0sgIi5JTlAiLCAiciIpKXsKICAgICAgICAgZnJlb3BlbihUQVNLICIuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgIC8vZnJlb3BlbihUQVNLICIuT1VUIiwgInciLCBzdGRvdXQpOwogICAgICB9Cn0KaW50IG4sIHE7CnZlY3RvcjxpbnQ+IHN0Owp2b2lkIHVwZGF0ZShpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHBvcywgaW50IHZhbCl7CiAgICBpZihsID09IHIpewogICAgICAgIHN0W2lkXSA9IHZhbDsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgbSA9IChsK3IpLzI7CiAgICBpZihwb3MgPD0gbSkgdXBkYXRlKDIqaWQsIGwsIG0sIHBvcywgdmFsKTsKICAgIGVsc2UgdXBkYXRlKDIqaWQrMSwgbSsxLCByLCBwb3MsIHZhbCk7CiAgICBzdFtpZF0gPSBtYXgoc3RbMippZF0sIHN0WzIqaWQrMV0pOwp9CmludCB3YWxrKGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYsIGludCB2YWwpewogICAgaWYodSA+IHIgfHwgdiA8IGwgfHwgc3RbaWRdIDw9IHZhbCkgcmV0dXJuIC0xOwogICAgaWYobCA9PSByKSByZXR1cm4gbDsKICAgIGludCBtID0gKGwrcikvMjsKICAgIGludCByZXMgPSB3YWxrKDIqaWQrMSwgbSsxLCByLCB1LCB2LCB2YWwpOwogICAgaWYocmVzICE9IC0xKSByZXR1cm4gcmVzOwogICAgcmV0dXJuIHdhbGsoMippZCwgbCwgbSwgdSwgdiwgdmFsKTsKfQp2b2lkIHNvbHZlKCl7CiAgICBjaW4gPj4gbiA+PiBxOwogICAgdmVjdG9yPG11bHRpc2V0PGludD4+IHMobisyKTsKICAgIHN0LmFzc2lnbig0Km4rMSwgLWluZik7CiAgICB3aGlsZShxLS0pewogICAgICAgIGludCB0eXBlOyBjaW4gPj4gdHlwZTsKICAgICAgICBpZih0eXBlID09IDEpewogICAgICAgICAgICBpbnQgcG9zLCB2YWw7IGNpbiA+PiBwb3MgPj4gdmFsOwogICAgICAgICAgICBzW3Bvc10uaW5zZXJ0KHZhbCk7CiAgICAgICAgICAgIGludCBjdXIgPSAqc1twb3NdLnJiZWdpbigpOwogICAgICAgICAgICB1cGRhdGUoMSwxLG4scG9zLGN1cik7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYodHlwZSA9PSAyKXsKICAgICAgICAgICAgaW50IHBvcywgdmFsOyBjaW4+PiBwb3MgPj4gdmFsOwogICAgICAgICAgICBhdXRvIGl0ID0gc1twb3NdLmZpbmQodmFsKTsKICAgICAgICAgICAgaWYoaXQgIT0gc1twb3NdLmVuZCgpKXsKICAgICAgICAgICAgICAgIHNbcG9zXS5lcmFzZShpdCk7CiAgICAgICAgICAgICAgICBpbnQgY3VyID0gc1twb3NdLmVtcHR5KCkgPyAtaW5mIDogKnNbcG9zXS5yYmVnaW4oKTsKICAgICAgICAgICAgICAgIHVwZGF0ZSgxLDEsbixwb3MsY3VyKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBpbnQgbCwgciwgdmFsOyBjaW4gPj4gbCA+PiByID4+IHZhbDsKICAgICAgICAgICAgaW50IGFucyA9IHdhbGsoMSwxLG4sbCxyLHZhbCk7CiAgICAgICAgICAgIGlmKGFucyA9PSAtMSkgY291dCA8PCAiTk9ORSIgPDwgJ1xuJzsKICAgICAgICAgICAgZWxzZSBjb3V0IDw8IGFucyA8PCAnXG4nOwogICAgICAgIH0KICAgIH0KfQpzaWduZWQgbWFpbigpewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpO2Npbi50aWUobnVsbHB0cik7CiAgICByZWFkKCk7CiAgICBpbnQgdD0xOyAvL2NpbiA+PiB0OwogICAgd2hpbGUodC0tKSBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0K