#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
struct fa
{
int eleje,vege,ertek;
};
fa x[1<<10];
int k,n,m,p,i,b,c;
bool a;
int general(int cs, int b, int j)
{
x[cs].eleje=b;
x[cs].vege=j;
k=(b+j)>>1;
if(b!=j)
{
general(cs<<1,b,k);
general((cs<<1)+1,k+1,j);
}
}
int akt(int cs,int poz,int p)
{
if(x[cs].eleje==x[cs].vege) {x[cs].ertek=p; return p;}
else
{
k=(x[cs].eleje+x[cs].vege)>>1;
if(poz<=k)
{x[cs].ertek= max(x[(cs<<1)+1].ertek,akt(cs<<1,poz,p));
return x[cs].ertek;}
else {x[cs].ertek=max(x[cs<<1].ertek,akt((cs<<1)+1,poz,p));
return x[cs].ertek;}
}
}
int lekerd(int cs,int b, int j)
{
if(b==x[cs].eleje&&j==x[cs].vege) return x[cs].ertek;
else
{
k=(x[cs].eleje+x[cs].vege)>>1;
if(b>k) return lekerd((cs<<1)+1,b,j);
else if(j<=k) return lekerd((cs<<1),b,j);
else
{
return max( lekerd(cs<<1,b,k), lekerd((cs<<1)+1,k+1,j) );
}
}
}
int main()
{
f>>n>>m;
general(1,1,n);
for(i=1;i<=n;i++)
{
f>>p;
akt(1,i,p);
}
//for(i=1;i<=2*n;i++)
// g<<x[i].ertek<<" ";
for(i=1;i<=m;i++)
{
f>>a>>b>>c;
if(a) akt(1,b,c);
else g<<lekerd(1,b,c)<<"\n";
}
return 0;
}