记录
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+20;
inline int read(){
int f=1,r=0;char c=getchar();
if(!isdigit(c)){if(c=='-') f=-1;c=getchar();}
while(isdigit(c)){r=r*10+c-'0';c=getchar();}
return f*r;
}
int n,m;
struct node{
int minn;
int l,r;
}t[N*4+20];
int a[N];
inline int ls(int x){return x<<1;}
inline int rs(int x){return x<<1|1;}
void pushup(int u){
t[u].minn=min(t[ls(u)].minn,t[rs(u)].minn);
}
void build(int u,int l,int r){
t[u].l=l;
t[u].r=r;
if(l==r){
t[u].minn=a[l];
return;
}
int mid=l+r>>1;
build(ls(u),l,mid);
build(rs(u),mid+1,r);
pushup(u);
}
int query(int u,int ql,int qr){
if(ql<=t[u].l&&t[u].r<=qr) return t[u].minn;
else if(t[u].r<ql||qr<t[u].l) return INT_MAX;
return min(query(ls(u),ql,qr),query(rs(u),ql,qr));
}
signed main(){
n=read();m=read();
for(int i=1;i<=n;i++) a[i]=read();
build(1,1,n);
int l,r;
while(m--){
l=read();r=read();
printf("%d ",query(1,l,r));
}
return 0;
}