#include <fstream>
using namespace std;
ifstream cin ("arbint.in");
ofstream cout ("arbint.out");
int n,m;
int h[400005];
void actualizare (int st,int dr,int vf,int pozst,int pozdr,int val)
{
if (pozst==st && dr==pozdr)
{
h[vf] = val;
return;
}
int nval = -1;
int mij = (st+dr)/2;
if (pozst <= mij)
actualizare(st,mij,2*vf,pozst,pozdr,val);
if (pozdr>mij)
actualizare(mij+1,dr,2*vf+1,pozst,pozdr,val);
nval = max(nval,h[2*vf]);
nval = max(nval,h[2*vf+1]);
h[vf] = nval;
}
int intreaba (int st,int dr,int vf,int pozst,int pozdr)
{
if (pozst<=st && dr<=pozdr)
return h[vf];
int nval = -1;
int mij = (st+dr)/2;
if (pozst <= mij)
nval = max(nval,intreaba(st,mij,2*vf,pozst,pozdr));
if (pozdr>mij)
nval = max(nval,intreaba(mij+1,dr,2*vf+1,pozst,pozdr));
return nval;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int i,j;
cin >> n >> m;
for (i=1;i<=n;i++)
{
int x;
cin >> x;
actualizare(1,n,1,i,i,x);
}
for (i=1;i<=m;i++)
{
int t,x,y;
cin >> t >> x >> y;
if (t == 0)
cout << intreaba(1,n,1,x,y) << '\n';
else
actualizare(1,n,1,x,x,y);
}
return 0;
}