#include <bits/stdc++.h>
#define Nmax 131073
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int A[2*Nmax],n,m,N=1;
void build(){
for(int i=N-1;i>=1;i--) A[i]=max(A[i<<1],A[i<<1|1]);
}
void modify(int p,int val){
for(A[p+=N-1]=val;p>1;p>>=1) A[p>>1]=max(A[p],A[p^1]);
}
int query(int l,int r){
int res=0;
for(l+=N-1,r+=N;l<r;l>>=1,r>>=1){
if(l&1) res=max(res,A[l++]);
if(r&1) res=max(res,A[--r]);
}
return res;
}
int main()
{
f>>n>>m;
while(N<n) N<<=1;
for (int i=1;i<=n;i++)
f>>A[N+i-1];
build();
int t,p,val;
for (int i=1;i<=m;i++){
f>>t>>p>>val;
if (t==0) g<<query(p,val)<<'\n';
else modify(p,val);
}
return 0;
}