#include <fstream>
#include <vector>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
struct SegTree {
int* v;
int n;
SegTree(int num) : n(num) {
v= new int[4*num+1];
for(int i=0;i<=4*num;i++)
v[i]=INT_MAX;
}
~SegTree() { delete[] v; }
void insert(int pos, int x, int node, int left, int right)
{
if(left==right)
{
v[node]=x;
return;
}
int mid=(left+right)/2;
if(pos<=mid)
insert(pos, x, 2*node, left, mid);
else
insert(pos, x, 2*node+1, mid+1, right);
v[node]=min(v[2*node], v[2*node+1]);
}
int query(int a, int b, int node, int left, int right)
{
if(a==left&&b==right)
return v[node];
int mid=(left+right)/2;
int x=INT_MAX, y=INT_MAX;
if(a<=mid)
x=query(a, min(mid, b), 2*node, left, mid);
if(b>mid)
y=query(max(mid+1, a), b, 2*node+1, mid+1, right);
return min(x, y);
}
};
int main() {
int n, m;
in>>n>>m;
SegTree segTree(n);
for(int i=1;i<=n;i++)
{
int x;
in>>x;
segTree.insert(i, x, 1, 1, n);
}
while(m)
{
m--;
int a, b;
in>>a>>b;
out<<segTree.query(a, b, 1, 1, n)<<'\n';
}
return 0;
}