#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m, a[400001];
int tip, x, y;
void adaugare(int st, int dr, int i, int poz){
if(st==dr || st>dr){
a[poz]=x;
return;
}
int mij=(st+dr)/2;
if(i>mij){
adaugare(mij+1, dr, i, poz*2+1);
}
else adaugare(st, mij, i, poz*2);
a[poz]=max(a[poz*2], a[poz*2+1]);
}
int maxim(int st, int dr, int star, int drar, int poz){
if(dr<star|| (star == drar && st!=dr))
return 0;
if(st == star && dr==drar)
return a[poz];
int mij=(star+drar)/2;
int max1=maxim(st, mij, star, mij, poz*2);
int max2=maxim(mij+1, dr, mij+1, drar, poz*2+1);
return max(max1, max2);
}
int main()
{
f>>n>>m;
for(int i=1; i<=n; i++){
f>>x;
adaugare(1,n,i,1);
}
for(int i=1; i<=m; i++){
f>>tip>>y>>x;
if(tip ==1)
adaugare(1,n,y,1);
else g<<maxim(y,x,1,n,1)<<'\n';
}
return 0;
}