type tree=record l,r,data,ls,rs,f:longint end; var a,f:array[1..100000]of longint; t:array[1..500000]of tree; n,m,i,k,x,y,num:longint; flag:boolean; function min(a,b:longint):longint; begin if a<b then exit(a) else exit(b) end; procedure build(l,r:longint); var h:longint; begin inc(num); h:=num; t[h].l:=l; t[h].r:=r; if l<>r then begin t[h].ls:=num+1; t[num+1].f:=h; build(l,(l+r)div 2); t[h].rs:=num+1; t[num+1].f:=h; build(((l+r)div 2)+1,r); t[h].data:=min(t[t[h].ls].data,t[t[h].rs].data); end else begin t[h].data:=a[l];f[l]:=h end; end; procedure rebuild(x:longint); begin if x=0 then exit; if t[x].data<>min(t[t[x].ls].data,t[t[x].rs].data) then begin t[x].data:=min(t[t[x].ls].data,t[t[x].rs].data); rebuild(t[x].f) end end; procedure change(m,x:longint); begin t[f[m]].data:=x; rebuild(t[f[m]].f) end; function find(h,p,q:longint):longint; var m:longint; begin if (t[h].l=p)and(t[h].r=q) then exit(t[h].data); m:=(t[h].l+t[h].r)div 2; if q<=m then exit(find(t[h].ls,p,q)); if p>m then exit(find(t[h].rs,p,q)); exit(min(find(t[h].ls,p,m),find(t[h].rs,m+1,q))); end; BEGIN flag:=true; num:=0; t[1].f:=0; readln(m,n); for i:=1 to m do read(a[i]); build(1,m); for i:=1 to n do begin read(k); if k=1 then if flag then begin readln(x,y); write(find(1,x,y)); flag:=false; end else begin readln(x,y);write(' ',find(1,x,y));end; if k=2 then begin readln(x,y); change(x,y) end; end; end.