#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int s3[100000*4+3];
int v[100000+3];
void update(int node,int from,int to,int pos,int val)
{
if(from==to)
{
s3[node]=val;
return;
}
int mid=(from+to)/2;
if(pos<=mid)
{
update(node*2,from,mid,pos,val);
}
else
{
update(node*2+1,mid+1,to,pos,val);
}
s3[node]=max(s3[node*2],s3[node*2+1]);
}
int query(int node,int from,int to,int qleft,int qright)
{
int smin=0;
if(qleft<=from&&qright>=to)
{
return s3[node];
}
int mid=(from+to)/2;
if(qleft<=mid)
{
smin=max(smin,query(node*2,from,mid,qleft,qright));
}
if(mid+1<=qright)
{
smin=max(smin,query(node*2+1,mid+1,to,qleft,qright));
}
return smin;
}
int main()
{
int n;
cin>>n;
int t;
cin>>t;
//for(int i=1;i<=n*4+2;i++)
//{
// s3[i]=1000000009;
//}
for(int i=1;i<=n;i++)
{
cin>>v[i];
update(1,1,n,i,v[i]);
}
for(int i=0;i<t;i++)
{
int a,b,c;
cin>>a>>b>>c;
if(a==1)
{
update(1,1,n,b,c);
}
else
{
cout<<query(1,1,n,b,c)<<endl;
}
}
return 0;
}