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