#include <iostream>
#include<fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int Segtree[500001], N, v[100001];
void adaugare(long long int nod, long long int poz, long long int left, long long int right){
if(left > poz || right < poz)
return;
if(left == right){
Segtree[nod] = v[poz];
return;
}
adaugare(nod*2, poz, left, (left+right)/2);
adaugare(nod*2+1, poz, (left+right)/2+1, right);
Segtree[nod] = min(Segtree[nod*2], Segtree[nod*2+1]);
}
int minim(int nod, int left, int right, int s, int r){
if(s > right || left > r)
return 100001;
if(s<=left && r>=right){
return Segtree[nod];
}
return min(minim(nod*2, left, (right+left)/2, s , r) , minim(nod*2+1, (right+left)/2+1, right, s, r));
}
int main()
{
int M, poz, val, start, stop, j;
fin>>N>>M;
for(int i = 1; i<=N; i++)
fin>>v[i];
for(j = 1; j <= N; j++){
adaugare(1,j,1, N);
}
// for(j = 1; j <= 2*N-1; j++){
// cout<<Segtree[j]<<" ";
// }
for(long long int i = 0; i<M; i++){
long long int l, r;
fin>>l>>r;
fout<<minim(1, 1, N, l, r)<<"\n";
}
}