#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[1<<K];
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]);
}
}
int interogare(int nod,int st,int dr,int &start,int &fin)
{
if(start<=st && dr<=fin)
return A[nod];
else
{
int m,x1,x2;
m=(st+dr)/2;
x1=x2=nmax;
if(start<m)
x1=interogare(fst(nod),st,m,start,fin);
if(m<fin)
x2=interogare(fst(nod)+1,m+1,dr,start,fin);
if(x1<x2)
return x1;
return x2;
}
}
void citeste_rezolva_scrie()
{
ifstream f("rmq.in");
ofstream g("rmq.out");
int i, 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;
g<<interogare(1,1,N,x,y)<<'\n';
}
f.close();
g.close();
}
int main()
{
citeste_rezolva_scrie();
return 0;
}