#include <bits/stdc++.h>
using namespace std;
int n,m,t,a,b;
int v[100010];
int arb[400010];
void update(int st,int dr,int p,int val,int poz)
{
if(st==dr) { arb[p]=val; return ; }
int mid=(st+dr)/2;
if(poz<=mid) update(st,mid,p<<1,val,poz);
else update(mid+1,dr,(p<<1)+1,val,poz);
arb[p]=max(arb[2*p],arb[2*p+1]);
}
int querry(int st,int dr,int p)
{
if(a<=st && b>=dr) return arb[p];
int maxi=-1,mid=(st+dr)/2;
if(a<=mid) maxi=max(maxi,querry(st,mid,p<<1));
if(b>mid) maxi=max(maxi,querry(mid+1,dr,(p<<1)+1));
return maxi;
}
int main()
{
int i;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&v[i]);
update(1,n,1,v[i],i);
}
for(;m;m--)
{
scanf("%d%d%d",&t,&a,&b);
if(t==1) update(1,n,1,b,a);
else printf("%d\n",querry(1,n,1));
}
fclose(stdin);
fclose(stdout);
return 0;
}