#include <iostream>

using namespace std;

int main()
{
    int N,M,k=0,operation,a,b;
    int k_base[2][100000];
    cin>>N>>M;
    //int A[N][N];
    for(int i = 0 ; i < M ; ++i)
    {
        cin>>operation;
        switch(operation)
        {
        case 1:
        {
            cin>>a>>b;
            //A[a][b]=k;
            //A[b][a]=k;
            k_base[0][k]=a;
            k_base[1][k]=b;
            ++k;
            break;
        }
        case 2:
        {
            cin>>a;
            //A[k_base[0][a]][k_base[1][a]]=0;
            //A[k_base[1][a]][k_base[0][a]]=0;
            k_base[0][a]==-1;
            k_base[1][a]==-1;
            break;
        }
        default:
        {
            cin>>a>>b;
            bool ok = true;
            if((k_base[1][0]==b && k_base[0][0]==a) || (k_base[1][0]==a && k_base[0][0]==b))
            {
                ok = false;
            }
            else if(k_base[1][k]!=k_base[0][0])
            {
                for(int j = 1; j < k-2; j++)
                {
                    if(k_base[1][j]!=k_base[0][j+1])
                    {
                        ok = false;
                        break;
                    }
                }
            }
            else
                ok = false;
            if(ok)
                cout<<"YES";
            else
                cout<<"NO";
            break;
        }
        }
    }
    return 0;
}