/*
TASK:bands
LANG:C++
*/
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
struct line{long x,y,n;int z;};

long n,m,x,y,z;
vector<line>s;

bool cmp(line a,line b)
{
 if(a.x<b.x)return 1;
 if(a.x==b.x)if(a.y<b.y)return 1;
 return 0;
}

int main()
{
 int c;
 long i,t,j,mn;
 line a;
 scanf("%ld%ld",&n,&m);
 a.x=0;a.y=n;a.z=0;a.n=0;
 s.push_back(a);
 for(i=1;i<=m;i++)
 {
  scanf("%ld",&z);
  if(z==1)
  {
   scanf("%ld%ld%d",&a.x,&a.y,&a.z);
   a.n=i;
   s.push_back(a);
  }
  else if(z==2)
  {
   scanf("%ld%ld",&x,&y);
   sort(s.begin(),s.end(),cmp);
   j=0;
   while(s[j].x<x&&j<s.size())j++;
   mn=s[j].n;
   z=j;
   
   while(s[j].x>=x&&s[j].y<=y&&j<s.size())
   {
    if(s[j].n>mn)
    {
     mn=s[j].n;
     z=j;
    }
    j++;
   }
   
   t=s.size();
   s[z].x=s[t-1].x;
   s[z].y=s[t-1].y;
   s[z].z=s[t-1].z;
   s[z].n=s[t-1].n;
   s.pop_back();
  }
  else
  {
   scanf("%ld",&x);
   sort(s.begin(),s.end(),cmp);
   j=0;
   while(x<s[j].x||x>=s[j].y&&j<s.size())j++;
   c=s[j].z;
   mn=s[j].n;
   while(x>=s[j].x&&x<s[j].y&&j<s.size())
   {
    if(s[j].n>mn)
    {
     mn=s[j].n;
     c=s[j].z;
    }
    j++;
   }
   printf("%d\n",c);
  }
 }
 //system("pause");
 return 0;
}
