#include <iostream>
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
const int MAX_N = 100000;
int aint[MAX_N * 4];
void update(int node, int lo, int hi, int pos, int val) {
if (lo == hi) {
aint[node] = val;
return;
}
int mid = lo + (hi - lo) / 2;
if(pos <= mid){
update(node * 2, lo, mid, pos, val);
} else {
update(node * 2 + 1, mid + 1, hi, pos, val);
}
aint[node] = min(aint[node * 2], aint[node * 2 + 1]);
}
/*int query(int node, int lo, int hi, int pos) {
if(lo == hi){
return aint[node];
}
int mid = lo + (hi - lo) / 2;
if(pos <= mid){
query(node * 2, lo, mid, pos);
} else {
query(node * 2 + 1, mid + 1, hi, pos);
}
}*/
int query2(int node, int lo, int hi, int a, int b) {
if(lo >= a && hi <= b){
return aint[node];
}
int mid = lo + (hi - lo) / 2;
int A,B;
if(a <= mid){
A = query2(node * 2, lo, mid, a, b);
}
if(b > mid){
B = query2(node * 2 + 1, mid + 1, hi, a, b);
}
return min(A,B);
}
int main()
{
int n,x,m,a,b;
f >> n >> m;
for(int i = 1; i <= n; i++){
f >> x;
update(1, 1, n, i, x);
}
for(int i = 1; i <= m; i++){
f >> a >> b;
g << query2(1, 1, n, a, b) << "\n";
}
return 0;
}