#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector <int> Fa;
int n,m;
int maximum;
void Update(int node, int down, int up, int x, int y)//Fa[x]=y, down es up a kereseshez kellenek,node=a graf csucsa
{
if(down==up)
{
Fa[node]=y;
return;
}
int middle=(down+up)/2;
if(x<=middle)
Update(node*2,down,middle,x,y);
else
Update(node*2+1,middle+1,up,x,y);
Fa[node]=max(Fa[node*2],Fa[node*2+1]);
}
void Query(int node,int down, int up, int x, int y)
{
if(x<=down && up<=y)
{
maximum=max(maximum,Fa[node]);
return;
}
int middle=(down+up)/2;
if(x<=middle)
Query(node*2,down,middle,x,y);
if(y>middle)
Query(node*2+1,middle+1,up,x,y);
//maximum=max(maximum,Fa[node]);
}
int main()
{
ifstream be ("arbint.in");
ofstream ki ("arbint.out");
be>>n>>m;
int s;
Fa.resize(4*n+66);
for(int i=1; i<=n; i++)
{
be>>s;
Update(1,1,n,i,s);
}
int e,x,y;
for(int i=0; i<m; i++)
{
be>>e>>x>>y;
if(e==1)
{
Update(1,1,n,x,y);
}
else if(e==0)
{
Query(1,1,n,x,y);
ki<<maximum<<'\n';
maximum=0;
}
}
be.close();
ki.close();
return 0;
}