#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int aint[400005];
int t[100005];
void build(int v,int st,int dr)
{
if(st==dr)
{
aint[v]=t[st];
}
else
{
int mij=(st+dr)/2;
build(v*2, st, mij);
build(v*2+1, mij+1, dr);
aint[v]=max(aint[v*2], aint[v*2+1]);
}
}
void update(int v, int st, int dr, int pos, int x)
{
if(dr<pos or pos<st)
{
return;
}
if(st==dr)
{
aint[v]=x;
return;
}
int mij=(st+dr)/2;
update(2*v, st, mij, pos, x);
update(2*v+1, mij+1, dr, pos, x);
aint[v]=max(aint[v*2], aint[v*2+1]);
}
int q(int v, int st, int dr, int l, int r)
{
if(st>r || dr<l)
{
return -1e9;
}
if(l<=st && dr<=r)
{
return aint[v];
}
int mij=(st+dr)/2;
return max(q(2*v, st, mij, l, r), q(2*v+1, mij+1, dr, l, r));
}
int main()
{
int n, m;
fin>>n>>m;
for(int i=1;i<=n;i++)
{
fin>>t[i];
}
build(1,1,n);
while(m--)
{
int tip, x, y;
fin>>tip>>x>>y;
if(tip==1)
{
update(1,1,n,x,y);
}
if(tip==0)
{
fout<<q(1,1,n,x,y)<<'\n';
}
}
}