0pts
#include <bits/stdc++.h>
#define ll long long
#define fst \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0);
#define f(x, y, z) for (register ll x = (y); x <= (z); x++)
using namespace std;
namespace ST
{
const ll N = 1e6 + 10, M = ceil(log2(N));
const ll po2[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432};
struct STB
{
ll st[N][21];
ll n;
bool qmax = 0;
ll max_o_min(ll a, ll b)
{
if (qmax)
return max(a, b);
else
return min(a, b);
}
void make(ll make_n, ll a[], bool kkk)
{
qmax = kkk;
n = make_n;
f(i, 1, n) st[i][0] = a[i];
f(i, 1, n)
{
f(j, 1, M)
{
if (i - 1 + po2[j] > n)
break;
st[i][j] = max_o_min(st[i][j - 1], st[i + po2[j] - 1 - po2[j - 1] + 1][j - 1]);
}
}
}
ll check(ll l, ll r)
{
ll len = r - l + 1;
len = log2(len);
return max_o_min(st[l][len], st[r - po2[len] + 1][len]);
}
};
}
const long long INF = 0x3f3f3f3f3f3f3f3f, N = 1e5 + 10;
ll n, m;
ll a[N];
ST::STB st_max;
signed main()
{
fst;
cin >> n >> m;
f(i, 1, n) cin >> a[i];
st_max.make(n, a, 1);
f(i, 1, m)
{
ll l, r;
cin >> l >> r;
cout << st_max.check(l, r) << endl;
}
return 0;
}