#include <stdio.h>
 
#include <set>
#include <vector>
 
using namespace std;
 
 
int n, m;
multiset <int> set1, set2;
vector <pair <int, int> > v;

int main ()
{
//    freopen ("graph.in", "r", stdin);
//    freopen ("graph.out", "w", stdout);
     
    scanf ("%d %d", &n, &m);
	
	int i, t, x, y;
	
	for (i = 1; i <= m; i ++)
	{
		scanf ("%d", &t);
		if (t == 1)
		{
			scanf ("%d %d", &x, &y);//muchii identice
			if (x > y)
				x ^= y ^= x ^= y;
			v.push_back (make_pair (x, y));
			set1.insert (x);
			set2.insert (-y);
		}
		if (t == 2)
		{
			scanf ("%d", &x);
			y = v[x].second;
			x = v[x].first;
			set1.erase (set1.find(x));
			set2.erase (set2.find(-y));
		}
		if (t == 3)
		{
			int i, j;
			scanf ("%d %d", &x, &y);
			i = *set1.begin();
			j = *set2.begin();
			j = -j;
			if (i < x || y < j)
				printf ("NO\n");
			else
				printf ("YES\n");
		}
	}
    return 0;
}