#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;
}