#include <iostream>
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int aint[1000000];
int n, m, x, y;
void update(int n, int left, int right, int pos, int val)
{
if (pos<left || pos>right)
return;
if (left==right)
{
aint[n]=val;
return;
}
int mid= (left+right)/2;
if (pos<=mid)
update(2*n, left, mid, pos, val);
else
update(2*n+1, mid+1, right, pos, val);
aint[n]= min(aint[2*n], aint[2*n+1]);
}
inline int query(int n, int left, int right, int a, int b)
{
if (a<=left && right<=b)
return aint[n];
long long v1=99999999, v2=99999999;
int mid= (left+right)/2;
if(a <= mid)
v1 = query(2 * n, left, mid, a, b);
if(b > mid)
v2 = query(2 * n + 1, mid + 1, right, a, b);
return min(v1,v2);
}
int main()
{
f >> n >> m;
for (int i = 1; i <= n; i++)
{
f>>x;
update(1,1,n,i,x);
}
for (int i = 0; i < m; i++)
{
f >> x >> y;
g << query(1, 1, n, x, y)<<"\n";
}
return 0;
}