#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int N = 100001;
int MaxArb[N];
int n , m;
void update(int pozitie, int valoare, int left, int right, int nod){
if( left == right ){
MaxArb[nod] = valoare;
return;
}
int mijloc = (left+right)/2;
if( pozitie <= mijloc){
update(pozitie, valoare, left, mijloc, nod*2);
} else {
update(pozitie, valoare, mijloc+1 , right, nod*2+1);
}
MaxArb[nod] = max(MaxArb[nod*2], MaxArb[nod*2+1]);
}
int maxim;
void query(int start, int end, int left, int right, int nod){
if ( start <= left && right <= end )
{
if ( maxim < MaxArb[nod] ) maxim = MaxArb[nod];
return;
}
int mijloc = (left+right)/2;
if( start <= mijloc){
query(start, end, left , mijloc, nod*2);
}
if( mijloc < end){
query(start, end, mijloc+1 , right, nod*2+1);;
}
}
int main()
{
in>>n>>m;
for(int i=1;i<=n;i++){
int x;
in>>x;
update(i,x,1,n,1);
}
for(int i=1;i<=n;i++){
int tip, a, b ;
in>>tip>>a>>b;
if(tip == 1){
update(a,b,1,n,1);
} else {
maxim = -1;
query(a,b, 1, n, 1);
out<<maxim<<"\n";
}
}
return 0;
}