#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int NMAX = 100009;
const int INF = 1<<31-1;
int tree[4*NMAX];
int N,Q;
void Update(int nod, int lf, int rg, int pos, int val)
{
if(lf == rg)
{
tree[nod] = val;
return;
}
int mid = lf + (rg-lf)/2;
if(pos<=mid)
Update(nod*2, lf, mid, pos, val);
else Update(nod*2+1, mid+1, rg, pos ,val);
tree[nod] = min( tree[nod*2], tree[nod*2+1] );
}
int Query(int nod,int lf ,int rg, int L, int R)
{
if( L<=lf && rg<=R )
{
return tree[nod];
}
int mid = lf + (rg-lf)/2;
int minim = INF;
if( L<=mid )
minim = min (minim, Query(nod*2, lf, mid, L, R) );
if( mid < R)
minim = min ( minim, Query(nod*2+1,mid+1,rg,L,R));
return minim;
}
void Read()
{
int i,j,x,y;
fin>>N>>Q;
for(i = 1; i<=4*N; ++i)
tree[i] = INF;
for(i = 1; i<=N; ++i)
{
fin>>j;
Update( 1,1,N,i,j);
}
for(i = 1; i<=Q; ++i)
{
fin>>x>>y;
fout<<Query(1, 1, N, x, y)<<"\n";
}
}
int main()
{
Read();
return 0;
}