#include <iostream>
#include <fstream>
using namespace std;
int tree[4 * 15000];
int v[15000];
void build(int index, int st, int dr) {
if (st == dr) {
tree[index] = v[dr];
return;
}
int m = (st + dr) / 2;
build(2 * index + 1, st, m);
build(2 * index + 2, m + 1, dr);
tree[index] = tree[2 * index + 1] + tree[2 * index + 2];
}
void achitare(int index, int a, int b, int st, int dr) {
if (st == dr) {
tree[index] -= b;
return;
}
int m = (st + dr) / 2;
if (a <= m)
achitare(2 * index + 1, a, b, st, m);
else
achitare(2 * index + 2, a, b, m + 1, dr);
tree[index] = tree[2 * index + 1] + tree[2 * index + 2];
}
int suma(int index, int st, int dr, int p, int q)
{
if (p <= st && q >= dr)
return tree[index];
int m = (st + dr) / 2;
if (p > m)
return suma(2 * index + 2, m + 1, dr, p, q);
else if (q <= m)
return suma(2 * index + 1, st, m, p, q);
int arbStang = suma(2 * index + 1, st, m, p, m);
int arbDrept = suma(2 * index + 2, m + 1, dr, m + 1, q);
return arbStang + arbDrept;
}
int main()
{
ifstream in("datorii.in");
ofstream out("datorii.out");
int n, m, a, b, cod;
in >> n >> m;
for (int i = 1; i <= n; i++)
in >> v[i];
build(1, 1, n);
for (int i = 1; i <= m; i++) {
in >> cod >> a >> b;
if (cod == 1)
out << suma(1, 1, n, a, b) << "\n";
else
achitare(1, a, b, 1, n);
}
return 0;
}