#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int N=100000+5;
int n;
int ret[3*N];
inline void upd(int nod,int st,int dr,int poz,int val)
{
if(dr<poz || st>poz)
{
return;
}
if(st==dr)
{
ret[nod]=val;
return;
}
int med=(st+dr)/2;
upd(2*nod,st,med,poz,val);
upd(2*nod+1,med+1,dr,poz,val);
ret[nod]=max(ret[2*nod],ret[2*nod+1]);
}
inline int ask(int nod,int st,int dr,int x,int y)
{
if(dr<x || y<st)
{
return -(1<<30);
}
if(x<=st && dr<=y)
{
return ret[nod];
}
int med=(st+dr)/2;
return max(ask(2*nod,st,med,x,y),ask(2*nod+1,med+1,dr,x,y));
}
int main()
{
int n,q;
fin>>n>>q;
for(int i=1;i<=n;i++)
{
int x;
fin>>x;
upd(1,1,n,i,x);
}
while(q--)
{
int t;
fin>>t;
if(t==0)
{
int st,dr;
fin>>st>>dr;
fout<<ask(1,1,n,st,dr)<<"\n";
}
else
{
int a,b;
fin>>a>>b;
upd(1,1,n,a,b);
}
}
return 0;
}