#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,m,v[100001];
int RMQ(int qs,int qe,int st,int dr,int node[],int index)
{
if(qs<=st && qe>=dr)
return node[index];
else if(qs>dr || qe<st)
return INT_MAX;
else {
int mid=(st+dr)/2;
return min(RMQ(qs,qe,st,mid,node,2*index+1),
RMQ(qs,qe,mid+1,dr,node,2*index+2));
}
}
int RMQConst(int st,int dr,int node[],int index)
{
if(st==dr)
{
node[index]=v[st];
return v[st];
}
else
{
int mid=(st+dr)/2;
node[index]=min(RMQConst(st,mid,node,2*index+1),
RMQConst(mid+1,dr,node,2*index+2));
return node[index];
}
}
int main()
{
int maxx,exp;
fin>>n>>m;
for(int i=1;i<=n;i++)
fin>>v[i];
exp=ceil(log2(n));
maxx=2*pow(2,exp)-1;
int node[maxx]={};
RMQConst(1,n,node,0);
for(int i=1;i<=m;i++)
{
int a,b;
fin>>a>>b;
fout<<RMQ(a,b,1,n,node,0)<<'\n';
}
return 0;
}