#include <bits/stdc++.h>
#define NMAX 100001
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int v[NMAX],aint[NMAX*4];
int n,m;
void build(int nod, int l, int r)
{
if(l==r)aint[nod]=v[l];
else
{
int m=(l+r)>>1;
build(nod*2,l,m);
build(nod*2+1,m+1,r);
aint[nod]= aint[nod*2] > aint[nod*2+1]? aint[nod*2] :aint[nod*2+1];
}
}
void update(int nod, int l, int r, int poz)
{
if(l==r)aint[nod]=v[l];
else
{
int m=(l+r)>>1;
if(poz<=m)update(nod*2,l,m,poz);
else update(nod*2+1,m+1,r,poz);
aint[nod]=max(aint[nod*2],aint[nod*2+1]);
}
}
int query(int nod, int l, int r, int b, int c)
{
if(b<=l&&c>=r)return aint[nod];
else
{
int mid=(l+r)>>1;
int mx1=-1,mx2=-1;
if(mid>=b) mx1=query(nod*2,l,mid,b,c);
if(mid+1<=c)mx2=query(nod*2+1,mid+1,r, b,c);
return max(mx1,mx2);
}
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;++i)fin>>v[i];
build(1,1,n);
for( int i=1;i<=m;++i)
{
int a,b,c;
fin>>a>>b>>c;
if(a==1)
v[b]=c,update(1,1,n,b);
else fout<<query(1,1,n,b,c)<<"\n";
}
return 0;
}
//by capmare alex nu copia ma omule!!