#include <bits/stdc++.h>
using namespace std;
const int NMAX=100005;
int aint[4*NMAX+5];
void update(int nod ,int st , int dr , int poz,int val)
{
if(st == dr)
aint[nod]=val;
else
{
int med = (st + dr)>>1;
if(poz<=med)update(2*nod , st,med,poz,val);
else
update(2*nod + 1 , med+1,dr,poz,val);
aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}
}
int query(int nod ,int st, int dr,int l,int r)
{
if(l<=st&&dr<=r)
return aint[nod];
int med=(st+dr)>>1;
int a = 0 ,b=0;
if(l<=med)a=query(2*nod,st,med,l,r);
if(r>med)
b=query(2*nod+1,med+1,dr,l,r);
return max(a,b);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int n , q , i , a , b;
scanf("%d%d",&n,&q);
for(i=0;i<n;i++)
{
scanf("%d",&a);
update(1,1,n,i+1,a);
}
for(i = 1;i<=q;i++)
{
int t;
scanf("%d%d%d",&t,&a,&b);
if(t == 1)update(1,1,n,a,b);
else
printf("%d\n",query(1,1,n,a,b));
}
return 0;
}