#include <bits/stdc++.h>
#define int long long int
#define double long double
#define NMAX 100
#define cin fin
#define cout fout
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
template <class T>
class rmq///indexed from 1
{
vector<vector<T>> sol;
public:
rmq(int value)
{
sol.reserve(value + 10);
int i;
for (i = 1; i <= value; i++)
sol[i].reserve(log2(value) + 10);
}
void pre(const vector<T> &v, int n)
{
int i, j;
for (i = 1; i <= n; i++)
sol[i][0] = i;
for (j = 1; (1 << j) <= n; j++)
for (i = 1; i + (1 << j) - 1 <= n; i++)
{
if (v[sol[i][j - 1]] < v[sol[i + (1 << (j - 1))][j - 1]])
sol[i][j] = sol[i][j - 1];
else
sol[i][j] = sol[i + (1 << (j - 1))][j - 1];
}
}
T query(const vector<T>&v, int st, int dr )
{
int logval= log2(dr-st+1);
int put= (1LL<<logval);
return min( v[ sol[st][logval] ],v[ sol[dr+1-put][logval] ] );
}
};
int32_t main()
{
int i, n, q;
vector<int> v;
v.push_back(0);
cin>>n>>q;
for (i = 1; i <= n; i++)
{
int x;
cin >> x;
v.push_back(x);
}
rmq<int> a(n);
a.pre(v,n);
for(i=1;i<=q;i++)
{
int st,dr;
cin>>st>>dr;
cout<< a.query(v,st,dr)<<'\n';
}
return 0;
}