#include<iostream>
#include<cstdlib>
#include<vector>
#include<cstdio>

using namespace std;

struct mu{int x,y;};
vector<mu> v;
    int t1,t2;

bool apartine(int x)
{
    return (t1<=x and x<=t2);
}

void operate()
{
    int a,b;mu aux; int k;

    scanf("%d",&a);
    if(a==1)
        {
            scanf("%d%d",&(aux.x),&(aux.y));
            v.push_back(aux);
        }
    else
        if(a==2)
            {
                scanf("%d",&b);
                v.erase(v.begin()+b-1);
            }
    else
        {
            scanf("%d%d",&t1,&t2);
            for(k=0;k<v.size();k++)
                if(apartine(v[k].x))
                    {if(!apartine(v[k].y))
                        {cout<<"NO\n";return;}}
                else{
                    if(apartine(v[k].y))
                    {cout<<"NO\n";return;}}
            cout<<"YES\n";
        }
}

int main()
{
    freopen("in","r",stdin);
    int n,m,l;
    cin>>n>>m;
    for(int k=1;k<=m;k++)
            operate();
}