#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
long long n, a[maxn], tree[maxn << 2], tag[maxn << 2];
void build(long long l, long long r, long long u)
{
    if (l == r)
    {
        tree[u] = a[l];
        return;
    }
    long long mid = l + ((r - l) >> 1);
    build(l, mid, u << 1);
    build(mid + 1, r, (u << 1) | 1);
    tree[u] =max(tree[u << 1] , tree[(u*2) + 1]);
}
void update(long long l, long long r, long long c, long long L, long long R, long long u)
{
    if (l <= L && R <= r)
    {
        tree[u] += (R - L + 1) * c;
        tag[u] += c;
        return;
    }
    long long mid = L + ((R - L) >> 1);
    if (tag[u])
    {
        tree[u << 1] += tag[u] ;
        tree[(u << 1) | 1] += tag[u];
        tag[u << 1] =max( tag[u],tag[u << 1]);
        tag[u << 1 + 1] =max( tag[u],tag[u << 1+1]);
    }
    tag[u] = 0;
    if (l <= mid)
        update(l, r, c, L, mid, u << 1);
    if (r > mid)
        update(l, r, c, mid + 1, R, (u << 1) | 1);
    tree[u] =max(tree[u << 1] , tree[(u << 1) | 1]) ;
}
long long getmax(long long l, long long r, long long L, long long R, long long u)
{
    if (l <= L && R <= r)
        return tree[u];
    long long mid = L + ((R - L) >> 1);
    if (tag[u])
    {
        tree[u << 1] += tag[u];
        tree[(u << 1) | 1] += tag[u];
        tag[u << 1] =max( tag[u],tag[u << 1]);
        tag[u << 1 + 1] =max( tag[u],tag[u << 1+1]);
    }
    tag[u] = 0;
    long long sum = 0;
    if (l <= mid)
        sum = getmax(l, r, L, mid, u << 1);
    if (r > mid)
        sum =max(getmax(l, r, mid + 1, R, (u << 1) | 1),sum);
    return sum;
}
int main()
{
    long long q, op, x, y, k;
    scanf("%lld%lld", &n, &q);
    while (q--)
    {
        scanf("%lld%lld%lld", &op, &x, &y);
        if (op == 1)
        {
            update(x, y, 1, 1, n, 1);
        }
        else
            printf("%lld\n", getmax(x, y, 1, n, 1));
    }
    return 0;
}