#include<fstream>
#include<algorithm>
#define INF 0x3f3f3f3f
#define DIM 100001
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int N, M, minim, Arb[DIM*3];
void Update(int nod, int st, int dr, int pos, int val)
{
if( st == dr )
Arb[nod] = val;
else
{
long long mid = (st + dr)/2;
if( pos <= mid ) Update(2*nod, st, mid, pos, val);
else Update(2*nod+1, mid+1, dr, pos, val);
Arb[nod] = min(Arb[2*nod], Arb[2*nod+1]);
}
}
void Query(int nod, int st, int dr, int a, int b)
{
if( a <= st && b >= dr )
minim = min(minim, Arb[nod]);
else
{
long long mid = (st+dr)/2;
if( a <= mid ) Query(2*nod,st,mid,a,b);
if( b > mid ) Query(2*nod+1,mid+1,dr,a,b);
}
}
int main()
{
int i, nr, x, y;
in >> N >> M;
for(i = 1; i <= N; i++)
{
in >> nr;
Update(1,1,N,i,nr);
}
for(i = 1; i <= M; i++)
{
in >> x >> y;
minim = INF;
Query(1,1,N,x,y);
out << minim << '\n';
}
return 0;
}