void init( LL s,LL t ){
LL dt = t-s;
log[1] = 0;
for( LL i = 2;i <= dt;i++ ) log[i] = i&(i-1) ? log[i-1] : log[i-1] + 1;
}
void build1( LL s,LL t,LL rmq[][20] ){
LL dt = t-s;
for( LL i = s;i < t;i++ ){
rmq[i][0] = a[i];
}
for( LL i = 1;i <= log[dt];i++ ){
for( LL j = s;j + (1 << i) <= t;j++ ){
rmq[j][i] = max( rmq[j][ i-1 ],rmq[ j + (1 << i-1 ) ][ i-1 ] );
}
}
}
void build2( LL s,LL t,LL rmq[][20] ){
LL dt = t-s;
for( LL i = s;i < t;i++ ){
rmq[i][0] = a[i];
}
for( LL i = 1;i <= log[dt];i++ ){
for( LL j = s;j + (1 << i) <= t;j++ ){
rmq[j][i] = min( rmq[j][ i-1 ],rmq[ j + (1 << i-1 ) ][ i-1 ] );
}
}
}
LL ask1( LL x,LL y,LL rmq[][20] ){
LL k = log[ y-x ];
return max( rmq[x][k],rmq[ y - ( 1 << k ) ][ k ] );
}
LL ask2( LL x,LL y,LL rmq[][20] ){
LL k = log[y-x];
return min( rmq[x][k],rmq[ y - ( 1 << k ) ][k] );
}