#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
const int N = 100001;
int seg[4*N];
void schimb(int nod,int l,int r,int val,int poz)
{
if(l==r)
{
seg[nod]=val;
}
else
{
int mid=(l+r)/2;
if(poz<=mid)
schimb(2*nod,l,mid,val,poz);
else
schimb(2*nod+1,mid+1,r,val,poz);
seg[nod]=max(seg[2*nod],seg[2*nod+1]);
}
}
int interval(int nod,int l,int r,int st,int dr)
{
int mid=(l+r)/2,rez=0;
if(st<=l && dr>=r)
return seg[nod];
if(st<=mid)
rez=max(rez,interval(2*nod,l,mid,st,dr));
if(dr>mid)
rez=max(rez,interval(2*nod+1,mid+1,r,st,dr));
return rez;
}
int main()
{
int n,m,i,tip,a,b;
cin>>n>>m;
for(i=1; i<=n; i++)
{
cin>>a;
schimb(1,1,n,a,i);
}
for(i=1; i<=m; i++)
{
cin>>tip>>a>>b;
if(tip==1)
schimb(1,1,n,b,a);
else
cout<<interval(1,1,n,a,b)<<'\n' ;
}
return 0;
}