#include #define debug(x) cerr << #x << ": " << x << '\n' #define debugArray(x,n) for(long long RmaxsumQ::T = 0; (RmaxsumQ::T) < (n); ++ (RmaxsumQ::T)) cerr << #x << "[" << RmaxsumQ::T << "]: " << x[RmaxsumQ::T] << '\n' using namespace std; typedef long long ll; typedef unsigned long long ull; typedef tuple Pll; typedef vector vll; const ll INF = LLONG_MAX/10; const ll MOD = 1e9+7; template struct SegmentTree{ using T = typename M::T; int n; vector dat; SegmentTree(){} SegmentTree(int n_){init(n_);} SegmentTree(const vector &v){build(v);} void init(int n_){ n=1; while(n &v){ int n_=v.size(); init(n_); for(int i=0;i>=1) dat[k]=M::f(dat[(k<<1)|0],dat[(k<<1)|1]); } //[a,b) T query(int a,int b,int k=1,int l=0,int r=-1){ if(r<0)r=n; if(r<=a||b<=l) return M::ti(); if(a<=l&&r<=b) return dat[k]; T vl=query(a,b,k*2,l,(l+r)/2); T vr=query(a,b,k*2+1,(l+r)/2,r); return M::f(vl,vr); } T operator[](const int &k) const {return dat[k + n];} }; struct RmaxsumQ{ struct T{ ll sum,max,l,r; T(){} T(ll a,ll b,ll c,ll d):sum(a),max(b),l(c),r(d){} }; static T ti(){return T(0,-INF,-INF,-INF);} static T f(const T& a, const T & b){ T ret; ret.sum = a.sum+b.sum; ret.max = max({a.max,b.max,a.r+b.l}); ret.l = max(a.l,a.sum+b.l); ret.r = max(a.r+b.sum,b.r); return ret; } }; int main(){ cin.tie(0); ios::sync_with_stdio(false); ll N,Q;cin>>N>>Q; SegmentTree seg(N); vll a(N); for(ll i=0;i>a[i]; seg.set_val(i,{a[i],a[i],a[i],a[i]}); } for(ll q=0;q>op; if(op[0]=='s'){ ll i,x;cin>>i>>x;i--; seg.set_val(i,{x,x,x,x}); a[i]=x; }else{ ll l1,l2,r1,r2;cin>>l1>>l2>>r1>>r2; l1--;l2--;r1--;r2--; ll ans=0; if(l2