#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
#define nmax 100005
#define INF 2000000000
int arb[4*nmax];
int N, M;
void update (int ind, int st, int dr, int poz, int val)
{
if (st == dr) { arb[ind] = val; return; }
int mij = (st+dr)/2;
if (poz <= mij) update(2*ind, st, mij, poz, val);
else update(2*ind+1, mij+1, dr, poz, val);
arb[ind] = min(arb[2*ind], arb[2*ind+1]);
}
int query (int ind, int st, int dr, int a, int b)
{
if (a<=st && dr<=b) return (arb[ind]);
int mij = (st+dr)/2, m1 = INF, m2 = INF;
if (a <= mij) m1 = query(2*ind, st, mij, a, b);
if (b > mij) m2 = query(2*ind+1, mij+1, dr, a, b);
return min(m1, m2);
}
void citire ()
{
int i, x;
scanf("%d%d", &N, &M);
memset(arb, 1, sizeof(arb) );
for (i = 1; i <= N; ++i)
{
scanf("%d", &x);
update(1,1,N,i,x);
}
}
void solve ()
{
int i, a, b;
for (i = 1; i <= M; ++i)
{
scanf("%d%d", &a, &b);
printf("%d\n", query(1, 1, N, a, b) );
}
}
int main ()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
citire ();
solve ();
return 0;
}