#include <bits/stdc++.h>
using namespace std;
int n,i,j,k,m,azk,op,a,b;
int Stree[4*100000];
class Segment_Tree
{
public :
int Stree[4*100013];
void update (int nod,int st,int dr,int a,int b,int value)
{
if (st>dr || a>dr || st>b) return ;
if (st>=a && dr<=b)
{
Stree[nod]=value;
return ;
}
int mij=(st+dr)/2;
update(nod*2,st,mij,a,b,value);
update(nod*2+1,mij+1,dr,a,b,value);
Stree[nod]=max(Stree[nod*2],Stree[nod*2+1]);
}
int query (int nod,int st,int dr,int a,int b)
{
if (st>dr || a>dr || st>b) return 0 ;
if (st>=a && dr<=b) return Stree[nod];
int mij=(st+dr)/2;
return max(query(nod*2,st,mij,a,b),query(nod*2+1,mij+1,dr,a,b));
}
};
Segment_Tree Arbore;
int main(void)
{
ifstream cin("arbint.in");
ofstream cout("arbint.out");
cin>>n>>m;
for (i=1;i<=n;++i)
{
cin>>azk;
Arbore.update(1,1,n,i,i,azk);
}
while(m--)
{
cin>>op>>a>>b;
if (op) Arbore.update(1,1,n,a,a,b);
else cout<<Arbore.query(1,1,n,a,b)<<"\n";
}
return 0;
}