#include <iostream>
#include <fstream>
#include <algorithm>
#define fs(i) i << 1
#define fd(i) (i << 1) + 1
#define maxN 100000*4
using namespace std;
int A[maxN];
void update(int l, int r, int i, int p, int v){
if (l == r){
A[i] = v;
return;
}
int m = (l + r) >> 1;
if (p <= m)
update(l, m, fs(i), p, v);
else
update(m + 1, r, fd(i), p, v);
A[i] = min(A[fs(i)], A[fd(i)]);
}
int vezi(int l, int r, int a, int b, int i){
if (l >= a && r <= b){
return A[i];
}
int m = (l + r) >> 1;
int v1, v2;
v1 = v2 = 100050;
if (m >= a) v1 = vezi(l, m, a, b, fs(i));
if (m < b) v2 = vezi(m + 1, r, a, b, fd(i));
return min(v1, v2);
}
int main(){
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m;
f >> n >> m;
for (int i = 1; i <= n; ++i){
int x;
f >> x;
update(1, n, 1, i, x);
}
for (int i = 0; i < m; ++i){
int x, y;
f >> x >> y;
g << vezi(1, n, x, y, 1) << "\n";
}
f.close();
g.close();
return 0;
}