#include <bits/stdc++.h>
#define ll long long
#define pii pair<int, int>
#define pll pair<ll, ll>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m, q, x, y;
int v[100005];
int stree[400005];
void update(int node, int pos, int val, int st, int dr)
{
if(st==dr){stree[node] = val; return;}
int mid = (st+dr)/2;
if(pos<=mid) update(node*2, pos, val, st, mid);
else update(node*2+1, pos, val, mid+1, dr);
stree[node] = max(stree[node*2], stree[node*2+1]);
}
int query(int x, int y, int st, int dr, int node)
{
if(x<=st && y>=dr) return stree[node];
int mid = (st+dr)/2;
int max1 = 0, max2 = 0;
if(x<=mid) max1 = query(x, y, st, mid, node*2);
if(y>mid) max2 = query(x, y, mid+1, dr, node*2+1);
return max(max1, max2);
}
int main()
{
fin>>n>>m;
for(int i=1; i<=n; i++)
{
fin>>v[i];
update(1, i, v[i], 1, n);
}
for(int i=1; i<=m; i++)
{
fin>>q>>x>>y;
if(q==1)
{
update(1, x, y, 1, n);
v[x] = y;
}
else
fout<<query(x, y, 1, n, 1)<<'\n';
}
return 0;
}