#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int a[100001];
int t[400001];
void build(int v,int st,int dr)
{
if(st==dr)
t[v]=a[st];
else
{
int mid=(st+dr)/2;
build(v*2,st,mid);
build(v*2+1,mid+1,dr);
t[v]=max(t[v*2],t[v*2+1]);
}
}
void update(int v,int st,int dr,int pos,int val)
{
if(st==dr)
t[v]=val;
else
{
int mid=(st+dr)/2;
if(pos<=mid)
update(v*2,1,mid,pos,val);
else update(v*2+1,mid+1,dr,pos,val);
t[v]=max(t[v*2],t[v*2+1]);
}
}
int query(int v,int st,int dr,int qst,int qdr)
{
if(st>=qst && dr<=qdr)
return t[v];
else if(st>qdr || dr<qst)
return -1e9;
else
{
int mid=(st+dr)/2;
return max(query(v*2,1,mid,qst,qdr),query(v*2+1,mid+1,dr,qst,qdr));
}
}
int main()
{
int n,m,st,dr,type;
fin>>n>>m;
for(int i=1;i<=n;i++)
fin>>a[i];
build(1,1,n);
for(int i=1;i<=m;i++)
{
fin>>type>>st>>dr;
if(type==0)
fout<<query(1,1,n,st,dr)<<'\n';
else update(1,1,n,st,dr);
}
return 0;
}