#include <fstream>
#define K 17
#define fst(x) (x<<1)
#define nmax 100000
#define minim(a,b) ((a)<(b)?(a):(b))
using namespace std;
int A[4*nmax];
int N,M;
void actualizare(int nod,int st,int dr,int &valoare,int &pozitie)
{
int m;
if(st == dr)
A[nod]=valoare;
else
{
m=(st+dr)/2;
if(pozitie<=m)
actualizare(fst(nod),st,m,valoare,pozitie);
else
actualizare(fst(nod)+1,m+1,dr,valoare,pozitie);
A[nod]=minim(A[fst(nod)],A[fst(nod)+1]);
}
}
void interogare(int nod,int st,int dr,int &start,int &fin,int &rez)
{
if(start<=st && dr<=fin)
{
if(A[nod]<rez)
rez=A[nod];
return;
}
else
{
int m;
m=(st+dr)/2;
if(start<m)
interogare(fst(nod),st,m,start,fin,rez);
if(m<fin)
interogare(fst(nod)+1,m+1,dr,start,fin,rez);
}
}
void citeste_rezolva_scrie()
{
ifstream f("rmq.in");
ofstream g("rmq.out");
int i,rezultat,val,x,y;
f>>N>>M;
for(i=1;i<=N;i++)
{
f>>val;
actualizare(1,1,N,val,i);
}
for(i=1;i<=M;i++)
{
f>>x>>y;
rezultat=nmax;
interogare(1,1,N,x,y,rezultat);
g<<rezultat<<'\n';
}
f.close();
g.close();
}
int main()
{
citeste_rezolva_scrie();
return 0;
}