#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int N = 400003;
int n,q,a[N],m,x,y,z,c,getMax(int,int,int);
int main()
{
f>>n>>q;
z=1;
while(z<n)z*=2;
m=2*z;
z--;
for(int i=1;i<=n;i++)
f>>a[z+i];
for(int i=z;i>=1;i--)
a[i]=max(a[2*i],a[2*i+1]);
int p=1,s=1;
for(int i=1;i<m;i++)
{
if(i==s)
{
p*=2;
s+=p;
}
}
for(;q;q--)
{
f>>c>>x>>y;
if(c==1)
{
x+=z;
a[x]=y;
for(x/=2;x;x/=2)
a[x]=max(a[2*x],a[2*x+1]);
}
else
{g<<getMax(1,1,z+1)<<'\n';
}
}
return 0;
}
int getMax(int nod,int X,int Y)
{
if(x>Y||X>y)
return 0;
if(x<=X&&Y<=y)
{
return a[nod];
}
int M=(X+Y)/2;
return max(getMax(2*nod,X,M),getMax(2*nod+1,M+1,Y));
}