#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m,minim,arb[500005];
void add(int start, int stop, int val, int poz, int loc)
{
if(start == stop)
{
arb[loc]=val;
return;
}else{
int mid = (start+stop)/2;
if(poz<=mid) add(start,mid,val,poz,2*loc);
else add(mid+1,stop,val,poz,2*loc+1);
arb[loc]=min(arb[2*loc],arb[2*loc+1]);
}
}
void query(int start,int stop, int left, int right, int poz)
{
if(left<=start && stop<=right)
{
minim=min(minim,arb[poz]);
return;
}
if(start!=stop)
{
int mid =(start+stop)/2;
if(left<=mid) query(start,mid,left,right,2*poz);
if(right>mid) query(mid+1,stop,left,right,2*poz+1);
}
}
int main()
{
memset(arb,INT_MAX,sizeof(arb));
f>>n>>m;
for(int i=1;i<=n;++i)
{
int x;
f>>x;
add(1,n,x,i,1);
}
for(int i=1;i<=m;++i)
{
int x,y;
f>>x>>y;
minim = INT_MAX;
query(1,n,x,y,1);
g<<minim<<'\n';
}
}