#include<iostream>
#include<fstream>
#include<bitset>
using namespace std;
const int NMAX=300010;
int arb[NMAX],v[NMAX];
void init(int st,int dr,int poz)
{
if(st==dr)
{
arb[poz]=v[st];
return;
}
int mij=(st+dr)>>1;
init(st,mij,poz*2);
init(mij+1,dr,poz*2+1);
arb[poz]=max(arb[poz*2],arb[poz*2+1]);
}
void update(int st,int dr,int poz,int a,int b)
{
if(st==dr)
{
arb[poz]=b;
return;
}
int mij=(st+dr)>>1;
if(mij>=a)
update(st,mij,poz*2,a,b);
else
update(mij+1,dr,poz*2+1,a,b);
arb[poz]=max(arb[poz*2],arb[poz*2+1]);
}
int interog(int st,int dr,int poz,int a,int b)
{
if(st>=a&&dr<=b)
{
return arb[poz];
}
if(st>b||dr<a)
return -1;
int mij=(st+dr)>>1;
return max(interog(st,mij,poz*2,a,b),interog(mij+1,dr,poz*2+1,a,b));
}
int main()
{
ifstream si;
si.open("arbint.in");
ofstream so;
so.open("arbint.out");
int n,m;
si>>n>>m;
int i;
for(i=0;i<n;++i)
si>>v[i];
init(0,n-1,1);
int a,b,c;
for(i=0;i<m;++i)
{
si>>a>>b>>c;
if(a==1)
{
update(0,n-1,1,b-1,c);
}
else
{
so<<interog(0,n-1,1,b-1,c-1)<<'\n';
}
// cout<<a;
}
so.close();
si.close();
return 0;
}