#include <bits/stdc++.h>
#define pp(x) cout << #x << " = " << x << '\n'
using namespace std;
int n,m,valmax[400005],c,a,b,maxim;
void Update(int val, int pos, int nod, int l, int r){
if(l==r){
valmax[nod]=val;
return;
}
int mid=(l+r)/2;
if(pos<=mid) Update(val,pos,2*nod,l,mid);
else Update(val,pos,2*nod+1,mid+1,r);
valmax[nod]=max(valmax[2*nod],valmax[2*nod+1]);
}
void Query(int s, int e, int nod, int l, int r){
if(s<=l && r<=e){
if(maxim<valmax[nod]) maxim=valmax[nod];
return;
}
int mid=(l+r)/2;
if(s<=mid) Query(s,e,2*nod,l,mid);
if(mid<e) Query(s,e,2*nod+1,mid+1,r);
}
int main()
{
ifstream in("arbint.in");
ofstream out("arbint.out");
in >> n >> m;
for(int i=1;i<=n;i++){
in >> c;
Update(c,i,1,1,n);
}
for(int i=1;i<=m;i++){
in >> c >> a >> b;
if(c==1) Update(b,a,1,1,n);
else maxim=-1, Query(a,b,1,1,n), out << maxim << '\n';
}
}