样例过了,但是零分求调
#include<iostream>
#define N 100010
using namespace std;
int db[18]={0,65536,32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2,1};
//int bd[18]={0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536};
int m,n;
int f[N][16];
int main(){
cin>>m>>n;
for(int i=1;i<=m;i++)
cin>>f[i][0];
for(int j=1;j<16;j++)
for(int i=1;i<=m;i++)
f[i][j]=min(f[i][j-1],f[i+(1<<(j-1))][j-1]);
/*
for(int i=1;i<=m;i++){
for(int j=1;j<=15;j++)
cout<<f[i][j]<<" ";
cout<<endl;
}
*/
for(int i=1;i<=n;i++){
int a,b;
cin>>a>>b;
int j=1;
while(j++){
if(db[j]<=(b-1)){
//cout<<j<<" "<<db[j]<<endl;
break;
}
}
cout<<min(f[a][16-j],f[b-(1<<(16-j))][16-j])<<" ";
}
return 0;
}
//1 2 3 4 5 6 7 8 9 10 --0
//