#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define INFINIT 1000000
using namespace std;
int v[100005];
int ans[200005];
int Minimum(int a,int b){
return a<b?a:b;
}
void ConstructInit(int st,int dr,int pos){
int mij;
if(st==dr){
ans[pos]=v[st];
}else{
mij=(st+dr)/2;
ConstructInit(st,mij,pos*2);
ConstructInit(mij+1,dr,pos*2+1);
ans[pos]=Minimum(ans[pos*2],ans[pos*2+1]);
}
}
int Answear(int st,int dr,int x,int y,int pos){
int mij;
if(x<=st && dr<=y){
return ans[pos];
}
if(y<st){
return INFINIT;
}
if(dr<x){
return INFINIT;
}
mij=(st+dr)/2;
return Minimum(Answear(st,mij,x,y,pos*2),Answear(mij+1,dr,x,y,pos*2+1));
}
int main(){
int n,m,i,x,y;
FILE *fin,*fout;
fin=fopen("rmq.in","r");
fout=fopen("rmq.out","w");
fscanf(fin,"%d%d",&n,&m);
for(i=0;i<n;i++){
fscanf(fin,"%d",&v[i]);
}
ConstructInit(0,n-1,1);
for(i=0;i<m;i++){
fscanf(fin,"%d%d",&x,&y);
fprintf(fout,"%d\n",Answear(0,n-1,x-1,y-1,1));
}
fclose(fin);
fclose(fout);
return 0;
}