#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n,m;
int arb[400005];
void add(int st, int dr, int poz, int act_poz, int val)
{
if(st==dr)
{
arb[act_poz]=val;
return;
}
int mi = (st+dr)/2;
if(poz<=mi)
{
add(st,mi,poz,act_poz*2,val);
}
else
{
add(mi+1,dr,poz,act_poz*2+1,val);
}
arb[act_poz]=max(arb[act_poz*2],arb[act_poz*2+1]);
}
int query(int st, int dr, int a, int b, int poz)
{
if(st>=a && dr<=b)
{
return arb[poz];
}
if(st>b || dr<a) return 0;
int mi=(st+dr)/2;
int val1 = query(st,mi,a,b,2*poz);
int val2 = query(mi+1,dr,a,b,2*poz+1);
return max(val1,val2);
}
int main()
{
in >> n >> m;
for(int i=1; i<=n; i++)
{
int x;
in >> x;
add(1,n,i,1,x);
}
for(int i=1; i<=m; i++)
{
int c,a,b;
in >> c >> a >> b;
if(c==0)
{
out << query(1,n,a,b,1) << '\n';
}
else
{
add(1,n,a,1,b);
}
}
return 0;
}