{
TASK:bands
LANG:Pascal
}
program bands;
type AA=array[1..100000, 1..3] of integer;
var A:AA;
    cnt1,cnt,n,n1:longint;
    m,d,i,temp,j:integer;
    c:byte;
begin
 readln(m,n);
 cnt:=1;
 for n1:=1 to n do
 begin
  read(d);
  case d of
  1: begin
      readln(i,j,c);
      i:=i+1;
      cnt:=cnt+1;
      A[cnt,1]:=i;
      A[cnt,2]:=j;
      A[cnt,3]:=c;
     end;
  2: begin
      readln(i,j);
      i:=i+1;
      cnt1:=cnt;
      while ((cnt1>1) and ( ((i<A[cnt1,1]) and (j<A[cnt1,1])) or
            ((i>A[cnt1,2]) and (j>A[cnt1,2])) ) ) do cnt1:=cnt1-1;
      if cnt1=1 then
      else if ((i<A[cnt1,1]) or (i>A[cnt1,2]) or
              (j<A[cnt1,1]) or (j>A[cnt1,2])) then
      else if ((i=A[cnt1,1]) and (j=A[cnt1,2])) then
      begin
       cnt:=cnt-1;
       A[cnt1,1]:=0;
       A[cnt1,2]:=0;
       A[cnt1,3]:=0;
      end
      else
      begin
       temp:=i;
       i:=j;
       j:=A[cnt,2];
       A[cnt,2]:=temp;
       cnt:=cnt+1;
       A[cnt,1]:=i;
       A[cnt,2]:=j;
       A[cnt,3]:=c;
      end;
     end;
  3: begin
      readln(i);
      i:=i+1;
      cnt1:=cnt;
      while ((cnt1>1) and ((i<A[cnt1,1]) or (i>A[cnt1,2]))) do cnt1:=cnt1-1;
{del} writeln(cnt1, A[cnt1,1], A[cnt1,2]);
      c:=A[cnt1,3];
      writeln(c);
     end;
  end;
 end;
end.