#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
long long N,M,v[600005],val;
void actualizare(int nod,int l,int r,int pos,int val)
{
if(l==r) v[nod]=val;
else
{
int mij=(l+r)/2;
if(pos<=mij)
actualizare(2*nod,l,mij,pos,val);
else
actualizare(2*nod+1,mij+1,r,pos,val);
v[nod]=max(v[2*nod],v[2*nod+1]);
}
}
int maxim(int nod,int l,int r,int x,int y)
{
int mij,a=0,b=0;
if(x<=l&&r<=y)
return v[nod];
else
{
mij=(l+r)/2;
if(x<=mij) a=maxim(2*nod,l,mij,x,y);
if(y>=mij+1) b=maxim(2*nod+1,mij+1,r,x,y);
return max(a,b);
}
}
int main()
{
fin>>N>>M;
for(int i=1; i<=N; i++)
{
fin>>val;
actualizare(1,1,N,i,val);
}
int cer,x,y;
for(int i=1; i<=M; i++)
{
fin>>cer>>x>>y;
if(cer==1)
actualizare(1,1,N,x,y);
else
fout<<maxim(1,1,N,x,y)<<"\n";
}
fin.close();
fout.close();
return 0;
}