#include using namespace std; using ll = long long; template struct ST_MAX{ vectornum; int siz; T inf; ST_MAX(int n){ int x = 1; while(n > x) x <<= 1; siz = x; inf = - numeric_limits::max(); num = vector ((x<<1),0); } void Update(int x,T i){ x = x + siz - 1; num[x] += i; while(x != 0){ x = (x-1)/2; num[x] = max(num[x*2 + 1],num[x*2 + 2]); } } T Sub_Serch(int n,int m,int k,int l,int r){ if(r <= n || m <= l) return inf; if(n <= l && r <= m) return num[k]; k *= 2; T lx = Sub_Serch(n, m, k+1, l, (r+l)/2); T rx = Sub_Serch(n, m, k+2, (l+r)/2, r); return max(lx, rx); } T Serch(int n,int m){ return Sub_Serch(n, m+1, 0, 0, siz); } }; int main(){ int n,q; cin >> n >> q; ST_MAX tree(n); for(int i=0;i> x; tree.Update(i,x); } for(int i=0;i> c >> x >> y; if(c == 1){ x--; tree.Update(x,y); }else{ x--,y--; cout << tree.Serch(x,y) << endl; } } }