1 #include<iostream>
2 #include<algorithm>
3 #include<cstdio>
4
5 using namespace std;
6
7 const int N = 300010 ;
8 int num[N];
9 int minn[N];
10 int n,m,k,ans;
11
12 void buil(int l,int r,int rt)
13 {
14 if(l==r)
15 {
16 minn[rt]=num[l];return;
17 }
18 int m=(l+r)/2;
19 buil(l,m,rt*2);
20 buil(m+1,r,rt*2+1) ;
21 minn[rt]=min(minn[rt*2],minn[rt*2+1]);
22 }
23 void ask(int l,int r,int rt,int nowl,int nowr)
24 {
25 if(nowl<=l && nowr>=r)
26 {
27 ans=min(ans,minn[rt]);
28 return ;
29 }
30 int m=(l+r)/2;
31 if(nowl<=m)ask(l,m,rt*2,nowl,nowr);
32 if(nowr>=m+1) ask(m+1,r,rt*2+1,nowl,nowr);
33 }
34 int main()
35 {
36 scanf("%d%d",&m,&n);
37 for(int i=1;i<=m;++i)
38 scanf("%d",&num[i]);
39 buil(1,m,1);
40 for(int i=1;i<=n;++i)
41 {
42 ans=999999;
43 int a,b;
44 scanf("%d%d",&a,&b);
45 ask(1,m,1,a,b);
46 printf("%d ",ans);
47 }
48 return 0;
49 }