#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vc;
typedef vector<vector<int>> matrix;
#define ft(n) for(ull i=1; i<=n; i++)
#define sp ' '
string file = "rmq";
ifstream f(file + ".in");
ofstream g(file + ".out");
int n, m, a, b, logn;
vector<int> v;
vector<vector<int>> dp;
void test()
{
for (int i = 0; i <= logn; i++)
{
for (int j = 1; j <= n; j++)
g << dp[i][j] << sp;
g << endl;
}
g << endl;
}
void precalc()
{
for (int j = 1; j <= n; j++)
f >> dp[0][j]; //2^0 interval length
for (int i = 1; i <= logn; i++)
for (int j = 1; j <= n - (1 << i) + 1; j++)
dp[i][j] = min(dp[i - 1][j], dp[i - 1][j + (1 << (i - 1))]);
}
void rmq()
{
int a, b;
f >> a >> b;
int log_interval = log2(b - a + 1); //2 overlapping or touching intervals of 2^log2 length
int len_interval = (1 << log_interval);
int res = min(dp[log_interval][a], dp[log_interval][b - len_interval + 1]);
g << res << "\n";
}
int main()
{
f >> n >> m;
logn = log2(n);
dp.resize(logn + 1, vc(n + 5, 0));
precalc();
for (int i = 1; i <= m; i++)
rmq();
return 0;
}