#include <bits/stdc++.h>
using namespace std;
const int MAXN=500005*2;//初始化双倍长度,便于区间合并。
int n,q,a[MAXN],logi[MAXN],maxi[20][MAXN],mini[20][MAXN];
void solve(){
    for(int i=1;i<=n;i++){
        logi[i]=log2(i);
        //cout<<logi[i]<<" ";
    }
    maxi[0][1]=mini[0][1]=a[1];
    for(int i=0;i<20;i++){
        for(int j=1;j<=n;j++){
            if(i==0) maxi[0][j]=mini[0][j]=a[j];//单个长度空间初始化为该元素
            if(j+pow(2,i)-1<MAXN&&i!=0){
maxi[i][j]=max(maxi[i-1][j],maxi[i-1][(int)(j+pow(2,i-1))]);
mini[i][j]=min(mini[i-1][j],mini[i-1][(int)(j+pow(2,i-1))]);
//cout<<j<<" "<<j+pow(2,i)-1<<" "<<maxi[i][j]<<endl;;
            }
        }
    }
};
int op1(int l,int r){
    int log3=logi[r-l+1];
    return min(mini[log3][l],mini[log3][r-(int)pow(2,log3)+1]);
};
int op2(int l,int r){
int log3=logi[r-l+1];
    return max(maxi[log3][l],maxi[log3][r-(int)pow(2,log3)+1]);
};
int main() {
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    solve();
    while(q--){
        int op,l,r;
        cin>>op>>l>>r;
        if(op==1)
        cout<<op1(l,r)<<endl;
        else
        cout<<op2(l,r)<<endl;;
    }
}
// 64 位输出请用 printf("%lld")