#include <bits/stdc++.h>
using namespace std;
const int MaxN=2e5;
int N,Q,x,y,z;
//pool[0] 是0號到1號空島的橋
vector<int> pool(MaxN,1);
void build(int y){
pool[y]=1;
}
void blow_up(int y){
if(y>0){
pool[y-1]=0;
pool[y]=0;
}else{
pool[y]=0;
}
}
int check(int y, int z){
while(y<z){
if(pool[y]!=1){
return 0;
}
else if(pool[y]==1)
y++;
}
return 1;
}
int main() {
cin>>N>>Q;
for(int q=1;q<=Q;q++){
cin>>x;
if(x==1){
cin>>y;
build(y);
}else if(x==2){
cin>>y;
blow_up(y);
}else if(x==3){
cin>>y>>z;
if(check(y,z)){
cout<<"YES\n";
}else{
cout<<"NO\n";
}
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTWF4Tj0yZTU7CmludCBOLFEseCx5LHo7Ci8vcG9vbFswXSDmmK8w6Jmf5YiwMeiZn+epuuWztueahOapiwp2ZWN0b3I8aW50PiBwb29sKE1heE4sMSk7Cgp2b2lkIGJ1aWxkKGludCB5KXsKCXBvb2xbeV09MTsKfQp2b2lkIGJsb3dfdXAoaW50IHkpewoJaWYoeT4wKXsKCQlwb29sW3ktMV09MDsKCQlwb29sW3ldPTA7Cgl9ZWxzZXsKCQlwb29sW3ldPTA7Cgl9Cn0KaW50IGNoZWNrKGludCB5LCBpbnQgeil7CgoJd2hpbGUoeTx6KXsKCQlpZihwb29sW3ldIT0xKXsKCQkJcmV0dXJuIDA7CgkJfQoJCWVsc2UgaWYocG9vbFt5XT09MSkKCQkJeSsrOwoJfQoKCXJldHVybiAxOwp9CmludCBtYWluKCkgewoJY2luPj5OPj5ROwoJZm9yKGludCBxPTE7cTw9UTtxKyspewoJCWNpbj4+eDsKCQlpZih4PT0xKXsKCQkJY2luPj55OwoJCQlidWlsZCh5KTsKCQl9ZWxzZSBpZih4PT0yKXsKCQkJY2luPj55OwoJCQlibG93X3VwKHkpOwoJCX1lbHNlIGlmKHg9PTMpewoJCQljaW4+Pnk+Pno7CgkJCWlmKGNoZWNrKHkseikpewoJCQkJY291dDw8IllFU1xuIjsKCQkJfWVsc2V7CgkJCQljb3V0PDwiTk9cbiI7CgkJCX0KCQl9CgkJCQoJfQoJCglyZXR1cm4gMDsKfQ==