#include <stdio.h>
#define nm 100010
#define inf 0x3f3f3f3f
long T[4*nm];
long A[nm];
long n, m;
long mm;
inline long min(long a, long b)
{
return a<b?a:b;
}
void build(long n, long e, long u)
{
if (e==u) T[n]=A[e];
else
{
long mid=(e+u)>>1;
build(2*n, e, mid);
build(2*n+1, mid+1, u);
if (T[2*n]<T[2*n+1])
T[n]=T[2*n];
else
T[n]=T[2*n+1];
}
}
void query(long n, long e, long u, long i, long j)
{
if (i<=e && u<=j) mm=min(mm,T[n]);
else
{
long mid=(e+u)>>1;
if (i<=mid) query(2*n, e, mid, i, j);
if (j>mid) query(2*n+1, mid+1, u, i, j);
}
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%ld%ld", &n, &m);
long i;
for (i=1; i<=n; ++i) scanf("%ld", A+i);
build(1,1,n);
for (i=1; i<=m; ++i)
{
long x, y;
scanf("%ld%ld", &x, &y);
mm=inf;
query(1,1,n,x,y);
printf("%ld\n", mm);
}
return 0;
}