7910
uses math;var a,b,c,i,j,k:longint; v:array[1..100000]of longint; r:array[1..100000,0..20,1..2]of longint;function ss(l,u:longint):longint;var i,j:longint;begin if l=u then begin inc(r[l,0,1]); inc(r[u,0,1]); r[l,r[l,0,1],1]:=v[l]; r[l,r[l,0,1],2]:=u; r[u,r[u,0,1],1]:=v[l]; r[u,r[u,0,1],2]:=l; exit(v[l]); end else begin i:=ss(l,(u+l) div 2); j:=ss((u+l) div 2+1,u); inc(r[l,0,1]); inc(r[u,0,1]); r[l,r[l,0,1],1]:=max(i,j); r[l,r[l,0,1],2]:=u; r[u,r[u,0,1],1]:=max(i,j); r[u,r[u,0,1],2]:=l; exit(max(i,j)); end;end;function yy(l,u,i,j:longint):longint;var i1,j1,o:longint;begin i1:=0; j1:=0; if (i=l)and(j=u) then begin for o:=1 to r[l,0,1] do begin if r[l,o,2]=u then exit(r[l,o,1]); end; end else begin if (i>=l)and(i<=(u+l) div 2)and(j>=l)and(j<=(u+l) div 2) then i1:=yy(l,(u+l) div 2,i,j); if (i>=(u+l) div 2+1)and(i<=u)and(j>=(u+l) div 2+1)and(j<=u) then j1:=yy((u+l) div 2+1,u,i,j); if (i>=l)and(i<=(u+l) div 2)and(j>=(u+l) div 2+1)and(j<=u) then begin i1:=yy(l,(u+l) div 2,i,(u+l) div 2); j1:=yy((u+l) div 2+1,u,(u+l) div 2+1,j); end; exit(max(i1,j1)); end;end;begin readln(a,b); for c:=1 to a do read(v[c]); ss(1,a); for c:=1 to b do begin readln(i,j); writeln(yy(1,a,i,j)); end;end.