

const ll felix = (ll)2e6;

struct Tree{

    ll t[felix], f[felix];

    Tree(){
        fill(f, f + felix, 0);
        fill(t, t + felix, 0);
    }

    void Push(ll v){
        if(f[v]){
            t[v * 2] += f[v];
            t[v * 2 + 1] += f[v];
            f[v * 2] += f[v];
            f[v * 2 + 1] += f[v];
            f[v] = 0;
        }
    }

    void Inc(ll v, ll tl, ll tr, ll l, ll r, ll val){
        ll tm = (tl + tr) >> 1;
        Push(v);
        if(l > r) return;
        if(l == tl && r == tr){
            t[v] += val;
            f[v] += val;
            return;
        }
        Inc(v * 2, tl, tm, l, min(r, tm), val);
        Inc(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r, val);
        t[v] = min(t[v * 2], t[v * 2 + 1]);
    }

    ll Get(ll v, ll tl, ll tr, ll l, ll r){
        Push(v);
        ll tm = (tl + tr) >> 1;
        if(l > r)
            return ll(1e9);
        if(l == tl && r == tr)
            return t[v];
        return min(Get(v * 2, tl, tm, l, min(r, tm)),
                Get(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
    }

    ~Tree(){}
}T;
