#include <stdio.h>
#include <stdlib.h>
#define LMAX 100000
#define deschidere(cale,mod,flux)\
if((flux=fopen(cale,mod))==NULL){\
printf("\nNu se poate deschode %s.\n",cale);\
exit(1);\
}
void matrice(int m[LMAX][5],int a[LMAX],int n){
int i,j;
for(i=0;i<n;i++) m[i][0]=a[i];
for(j=0;(1<<j)<=n;j++)
if(a[m[i][j-1]]<a[m[i+(1<<(j-1))][j-1]])
m[i][j]=m[i][j-1];
else m[i][j]=m[i+(1<<(j-1))][j-1];
}
int rmq(int p,int q,int m[LMAX][5],int a[LMAX]){
int k=log(q-p+1);
if(a[m[p][k]]<=a[m[q-(1<<k)+1][k]])
return m[p][k];
else return m[q-(1<<k)+1][k];
}
int main(){
FILE *f,*g;
int matr[LMAX][5],n,m,a[LMAX],p,q,i;
deschidere("rmq.in","rt",f);
fscanf(f,"%d",&n);
for(i=0;i<n;i++)
fscanf(f,"%d",&a[i]);
matrice(matr,a,n);
fscanf(f,"%d",&m);
deschidere("rmq.out","wt",g);
for(i=0;i<m;i++){
fscanf(f,"%d %d",&p,&q);
fprintf(g,"%d\n",a[rmq(p,q,matr,a)]);
}
fclose(f);
fclose(g);
return 0;
}