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