#include <bits/stdc++.h>
#define ll long long
#define maxn 200005
#define rc(s) return cout << s,0
#define _ ios_base::sync_with_stdio(false);cin.tie(0);
#define mp make_pair
#define pii pair<int,int>
#define vi vector<int>
#define vll vector<long long>
using namespace std;
const int inf = INT_MAX;
int n,m,val,pos,x,y,z,start,finish;
int aint[420420];
void upd(int nod,int l, int r, int val)
{
if(l == r)
{
aint[nod] = val;
return;
}
int mid = (l+r)/2;
if(pos<=mid) upd(nod<<1,l,mid,val);
else upd(nod<<1|1,mid+1,r,val);
aint[nod] = min(aint[nod<<1],aint[nod<<1|1]);
}
int qry(int nod,int l,int r)
{
if(start <= l && finish >= r)
return aint[nod];
if(start > r || finish < l)
return inf;
return min(qry(nod<<1,l,(l+r)/2),qry(nod<<1|1,(l+r)/2+1,r));
}
int main(){
_
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
memset(aint,inf,sizeof(aint));
scanf("%d %d",&n,&m);
for(int i = 1;i<=n;i++)
{
scanf("%d",&x);
pos = i;
upd(1,1,n,x);
}
for(int i = 1;i<=m;i++)
{
scanf("%d %d",&x,&y);
start = x;
finish = y;
printf("%d\n",qry(1,1,n));
}
return 0;
}