#include <bits/stdc++.h>
#define ll long long
//#define fin cin
//#define fout cout
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int aint[300005];
void update (int index, int val, int st, int dr, int curent)
{
if (st==dr) {
aint[curent]=val;
return;
}
int mid=(st+dr)/2;
if (index<=mid) update (index, val, st, mid, curent*2);
else update (index, val, mid+1, dr, curent*2+1);
aint[curent]=min(aint[curent*2], aint[curent*2+1]);
}
///1 5 6 4 3
int query (int x, int y, int a, int b, int curent)
{
int mid=(x+y)/2;
int min1=INT_MAX, min2=INT_MAX;
if (a<=x&&y<=b) return aint[curent];
if (a<=mid) min1=query(x, mid, a, b, curent*2);
if (mid<b) min2=query(mid+1, y, a, b, curent*2+1);
//cout<<a<<' '<<b<<' '<<min1<<' '<<min2<<endl;
return min(min1, min2);
}
int main()
{
fin.tie(0); fin.sync_with_stdio(false);
int n, m; fin>>n>>m;
for (int i=1; i<=3*n; i++) aint[i]=INT_MAX;
for (int i=1; i<=n; i++) {
int x; fin>>x;
update(i, x, 1, n, 1);
//for (int i=1; i<=3*n; i++) cout<<aint[i]<<' ';
//cout<<endl;
}
//for (int i=1; i<=n; i++) cout<<query(1, n, i, i, 1)<<endl;
for (int i=1; i<=m; i++) {
int a, b; fin>>a>>b;
fout<<query(1, n, a, b, 1)<<'\n';
}
return 0;
}