{
TASK:bands
LANG:Pascal
}
program BANDS;

type
 band = record
  a,b: word;
  color: byte;
 end;
 PBand = ^TBand;
 TBand = record
  inf: band;
  prev: PBand;
 end;

var
 list: PBand;
 N: word;
 M,Mct: longint;

procedure AddBand(b: band; var p: PBand);
var
 t: PBand;
begin
 new(t);
 t^.inf:=b;
 t^.prev:=p;
 p:=t;
end;

procedure RemoveBand(var p: PBand);
var
 t: PBand;
begin
 t:=p;
 p:=p^.prev;
 dispose(t);
end;

procedure Add(i,j: word; c: byte);
var
 b: band;
begin
 b.a:=i;
 b.b:=j;
 b.color:=c;
 AddBand(b, list);
end;

procedure Remove(i,j: word);
var
 t,parent: PBand;
begin
 t:=list;
 parent:=nil;
 while(t<>nil) do
 begin
  if (t^.inf.a=i) and (t^.inf.b=j) then
  begin
   RemoveBand(t);
   if (parent=nil) then
    list:=t
   else
    parent^.prev:=t;
   break;
  end;
  parent:=t;
  t:=t^.prev;
 end;
end;

function GetColor(i: word): byte;
var
 c: byte;
 t: PBand;
begin
 c:=0;
 t:=list;
 while (t<>nil) do
 begin
  if (t^.inf.a<=i) and (t^.inf.b>i) then
  begin
   c:=t^.inf.color;
   break;
  end;
  t:=t^.prev;
 end;
 GetColor:=c;
end;

procedure ParseCommand;
var
 x,c: byte;
 i,j: word;
begin
 read(x);
 case x of
  1: begin
      readln(i,j,c);
      Add(i,j,c);
     end;
  2: begin
      readln(i,j);
      Remove(i,j);
     end;
  3: begin
      readln(i);
      writeln(GetColor(i));
     end;
 end;
end;

begin
 list:=nil;
 readln(N,M);
 for Mct:=1 to M do
  ParseCommand;
end.