#include <bits/stdc++.h>
using namespace std;
long long a[400010];
struct node
{
long long l,r;
long long minn;
}t[400010];
long long minn(long long a,long long b)
{
if(a < b)
return a;
return b;
}
void build_tree(long long i,long long l,long long r)
{
t[i].l = l;
t[i].r = r;
if(l == r)
{
t[i].minn = a[l];
return ;
}
long long mid = l+((r - l)>>1);
build_tree(i<<1,l,mid);
build_tree(i<<1 | 1,mid+1,r);
t[i].minn = minn(t[i<<1].minn,t[i<<1 | 1].minn);
return ;
}
int query_min(long long i,long long l,long long r)
{
if(t[i].l >= l && t[i].r <= r)
{
return t[i].minn;
}
long long ans = 1e9;
long long mid = t[i].l + ((t[i].r - t[i].l) >> 1);
if(l <= mid)
ans = minn(ans,query_min(i<<1,l,r));
else if(r > mid)
ans = minn(ans,query_min(i<<1 | 1,l,r));
return ans;
}
int main()
{
long long m,n;
cin >> m >> n;
for(long long i = 1; i <= m; i++)
{
cin >> a[i];
}
build_tree(1,1,m);
while(n--)
{
long long l,r;
cin >> l >> r;
cout << query_min(1,l,r) << ' ';
}
return 0;
}