#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define sc second
#define ft first
ifstream fin("rmq.in"); ofstream fout("rmq.out");
int A[100010], N, M;
short int a,b;
int T[400010];
long long construct(int l, int r, int nod){
if(r==l){T[nod]=A[r];}
else{int mij=l+r; mij/=2;
T[nod]=min(construct(l, mij, nod*2), construct(mij+1, r, 2*nod+1) );}
return T[nod];
}
int minimum(int n, int al, int ar, int l, int r){
if(l>r){return 2000000007;}
if(al==l && ar==r){return T[n];}
int mij=ar+al; mij/=2;
return min(minimum(2*n, al, mij, l, min(mij,r)), minimum(2*n+1, mij+1, ar, max(l, mij+1), r) ) ;
}
void update(int n, int al, int ar, int p, int v){
if(ar==al){T[n]=v;}
else{
int mij=ar+al; mij/=2;
if(p<=mij){
update(2*n, al, mij, p, v);
}
else{
update(2*n+1, mij+1, ar, p, v);
}
T[n]=min(T[2*n], T[2*n+1]);
}
}
int main() {
cin>>N>>M;
for(int i=1; i<=N; i++){
cin>>A[i];
}
construct(1, N, 1);
for(;M;M--){
cin>>a>>b;
cout<<minimum(1, 1, N, a, b)<<"\n";
}
return 0;
}