#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
class Arbmin{
protected :
int V[4 * NMAX];
public :
int N,Q,sol;
void BuildArb(int,int,int);
void Read();
void Update(int,int,int,int,int);
void Solution(int,int,int,int,int);
}A;
void Arbmin :: Read(){
fin >> N >> Q;
int x;
for(int i = 1; i <= N; i++){
fin >> x;
Update(1,1,N,i,x);
}
}
void Arbmin :: Update(int nod,int L,int R,int p,int x){
if(L == R){
V[nod] = x;
return;
}
int mid = (L + R) >> 1;
if(p <= mid)
Update(nod << 1,L,mid,p,x);
else
Update((nod << 1) + 1,mid + 1,R,p,x);
V[nod] = max(V[nod << 1],V[(nod << 1) + 1]);
}
void Arbmin :: Solution(int nod,int L,int R,int m,int M){
if(m <= L && M >= R){
A.sol = max(A.sol,V[nod]);
return;
}
if(L >= R)
return;
int mid = (R + L) >> 1;
if(mid >= L)
Solution(nod << 1,L,mid,m,M);
if(mid < R)
Solution((nod << 1) + 1,mid + 1,R,m,M);
}
int main()
{
ios :: sync_with_stdio(false);
int T,x,y;
A.Read();
for(int i = 1; i <= A.Q; i++){
fin >> T >> x >> y;
if(T == 0){
A.sol = 0;
A.Solution(1,1,A.N,x,y);
fout << A.sol << "\n";
} else {
A.Update(1,1,A.N,x,y);
}
}
return 0;
}