#include <iostream> #include <cstdio> using namespace std; const int maxn=200001; #define left l,m,rt<<1 #define right m+1,r,rt<<1|1 int Max[maxn<<2]; void UP(int rt) { Max[rt]=max(Max[rt<<1],Max[rt<<1|1]); } void build(int l,int r,int rt) { if(l==r) { scanf("%d",&Max[rt]); return; } int m=(l+r)>>1; build(left); build(right); UP(rt); } int query(int L,int R,int l,int r,int rt) { if(L<=l&&R>=r)return Max[rt]; int m=(r+l)>>1; int ret=0; if(L<=m)ret=max(ret,query(L,R,left)); if(R>m)ret=max(ret,query(L,R,right)); return ret; } int x[maxn]; int main() { int N,M,i,j,sum,T,q,le,ri; char character; int a,b; scanf("%d",&T); while(T--) { scanf("%d",&N); sum=0; build(1,N,1); scanf("%d",&q); while(q--) { scanf("%d%d",&le,&ri); int sum=query(le,ri,1,N,1); cout<<sum<<endl; } } return 0; }