#include<cstring>
#include<iostream>
#include<algorithm>
#include<climits>
using namespace std;
#define N 200005
#define LL long long
#define lc u<<1
#define rc u<<1|1
int w[N];
struct Tree
{
LL l,r,sum;
}tr[N*4];
void build(LL u,LL l,LL r)
{
tr[u]={l,r,w[l]};
if(l==r) return;
LL m=l+r>>1;
build(lc,l,m);
build(rc,m+1,r);
}
LL query(LL u,LL l,LL r){
LL max=INT_MAX;
if(l==r) return tr[u].sum;
LL m=tr[u].l+tr[u].r>>1;
if(l<=m) max=min(max,query(lc,l,r));
if(r>m) max=min(max,query(rc,l,r));
return max;
}
int main()
{
int n,m,x,y;
cin>>n>>m;
for(int i=1;i<=n;++i)
{
cin>>w[i];
}
build(1,1,n);
while(m--)
{
cin>>x>>y;
cout<<query(1,x,y)<<' ';
}
return 0;
}