#include<fstream>
#define nmax 100001
#define inf 0x3f3f3f3f
using namespace std;
int A[3*nmax];
int N,M,rezultat;
int minim(int &a,int &b)
{
if(a<b)
return a;
return b;
}
void actualizare(int nod,int st,int dr,int poz,int val)
{
if(st == dr)
A[nod]=val;
else
{
int mij=(st+dr)/2;
if(poz<=mij)
actualizare(2*nod,st,mij,poz,val);
else
actualizare(2*nod+1,mij+1,dr,poz,val);
A[nod]=minim(A[2*nod],A[2*nod+1]);
}
}
void interogare(int nod,int st,int dr,int a,int b)
{
if(a<=st && dr<=b)
{
if(A[nod]<rezultat)
rezultat=A[nod];
}
else
{
int mij=(st+dr)/2;
if(a<=mij)
interogare(2*nod,st,mij,a,b);
if(mij<b)
interogare(2*nod+1,mij+1,dr,a,b);
}
}
void citeste_si_rezolva()
{
ifstream f("rmq.in");
ofstream g("rmq.out");
int i,a,b,val;
f>>N>>M;
for(i=1;i<=N;i++)
{
f>>val;
actualizare(1,1,N,i,val);
}
for(i=1;i<=M;i++)
{
f>>a>>b;
rezultat=inf;
interogare(1,1,N,a,b);
g<<rezultat<<'\n';
}
f.close();
g.close();
}
int main()
{
citeste_si_rezolva();
return 0;
}