#include<bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int v[400007];
int m, n;
void update(int pos, int val, int st=1, int dr=n, int index=1)
{
int mij=(st+dr)/2;
if(st==dr)
{
v[index]=val;
return;
}
if(pos<=mij)
update(pos, val, st, mij, 2*index);
else
update(pos, val, mij+1, dr, 2*index+1);
v[index]=max(v[index*2], v[index*2+1]);
}
int querry(int a, int b, int st=1, int dr=n, int index=1)
{
int mij=(st+dr)/2;
if(st>=a && dr<=b) return v[index];
if(mij>=a && mij<b) return max(querry(a, b, st, mij, index*2), querry(a, b, mij+1, dr, index*2+1));
if(mij<a) return querry(a, b, mij+1, dr, index*2+1);
return querry(a, b, st, mij, index*2);
}
int main()
{
in>>n>>m;
for(int i=1; i<=n; ++i)
{
int x;
in>>x;
update(i, x);
}
for(int i=1; i<=m; ++i)
{
int c, a, b;
in>>c>>a>>b;
if(c==1)
update(a, b);
else
out<<querry(a, b)<<"\n";
}
}