#include <bits/stdc++.h>
#define zeros(x) ((x^(x-1))&x)
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,q,aib[400005],v[100005],x,maxim;
void edit(int nod,int st,int dr,int a,int b)
{
if(st==dr){
aib[nod]=x;
return;
}
int mid=(st+dr)/2;
if( a<=mid ) edit(2*nod,st,mid,a,b);
if( mid<b ) edit(2*nod+1,mid+1,dr,a,b);
aib[nod]=max(aib[nod*2],aib[nod*2+1]);
}
void compute(int nod,int st,int dr,int a,int b)
{
if(a<=st&&dr<=b){
maxim=max(maxim,aib[nod]);
return;
}
int mid=(st+dr)/2;
if( a<=mid ) compute(2*nod,st,mid,a,b);
if( mid<b ) compute(2*nod+1,mid+1,dr,a,b);
}
int main()
{
f>>n>>q;
for(int i=1;i<=n;i++){
f>>v[i];
x=v[i];
edit(1,1,n,i,i);
}
for(int i=1;i<=q;i++)
{
int t,a,b;
f>>t>>a>>b;
if(t==1){
x=b;
edit(1,1,n,a,a);
}
if(t==0){
maxim=0;
compute(1,1,n,a,b);
g<<maxim<<'\n';
}
}
}