#include <bits/stdc++.h>
#define MAXN 100005
using namespace std;
ifstream in ("rmq.in");
ofstream out ("rmq.out");
int x, a, b, arb[4*MAXN], n, m;
int query(int nod, int st, int dr, int a, int b)
{
if (a<=st && dr<=b)
return arb[nod];
int mij, left=2000000000, right=2000000000;
mij=(st+dr)/2;
if (a<=mij)
left=query(2*nod,st,mij,a,b);
if (b>mij)
right=query(2*nod+1,mij+1,dr,a,b);
return min(left,right);
}
void update(int nod, int st, int dr, int a, int b)
{
if (st==dr && st==a)
{
arb[nod]=b;
return;
}
int mij=(st+dr)/2;
if (a<=mij)
update(2*nod,st,mij,a,b);
else
update(2*nod+1,mij+1,dr,a,b);
arb[nod]=min(arb[2*nod],arb[2*nod+1]);
}
int main()
{
in >> n >> m;
for (int i=1; i<=n; i++)
{
in >> x;
update(1,1,n,i,x);
}
for (int i=1; i<=m; i++)
{
in >> a >> b;
out << query(1,1,n,a,b) << '\n';
}
return 0;
}