#include <bits/stdc++.h>
std::ifstream in("rmq.in");
std::ofstream out("rmq.out");
class RMQ {
private:
int n;
std::vector<std::vector<int>> rmq;
std::vector<int> lg;
std::vector<int> arr;
public:
RMQ(std::vector<int> _arr) {
arr = _arr;
n = (int)arr.size();
int l = log2((int)arr.size()) + 2;
rmq.resize(l);
for (int i = 0; i < (int)rmq.size(); i++) {
rmq[i].resize(n + 1);
}
for (int i = 0; i < n; i++) {
rmq[0][i] = i;
}
lg.resize(n + 1);
for (int i = 2; i <= n; i++) {
lg[i] = 1 + lg[i / 2];
}
for (int step = 1; (1 << step) <= n; step++) {
for (int i = 0; i - 1 < n - (1 << step); i++) {
int last = (1 << (step - 1));
if (arr[rmq[step - 1][i]] < arr[rmq[step - 1][i + last]]) {
rmq[step][i] = rmq[step - 1][i];
} else {
rmq[step][i] = rmq[step - 1][i + last];
}
}
}
}
int query(int l, int r) {
int p = lg[r - l + 1];
if (arr[rmq[p][l]] < arr[rmq[p][r - (1 << p) + 1]]) {
return rmq[p][l];
} else {
return rmq[p][r - (1 << p) + 1];
}
}
};
int n, m;
int main() {
in >> n >> m;
std::vector<int> v(n);
for (int &x : v) {
in >> x;
}
RMQ ds(v);
for (int i = 1; i <= m; i++) {
int x, y;
in >> x >> y;
out << v[ds.query(x - 1, y - 1)] << "\n";
}
return 0;
}