#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef pair<int, int> PII;
#define N 300010
vector<int> alls;
vector<PII> add, query;
long long a[N], s[N];
int n, m;
//求出x离散化后的值(第一个>=x的位置)
int find(int x){
int l = 0, r = alls.size()-1;
int mid = (l+r) / 2;
while (l < r){
if (alls[mid] >= x)
r = mid;
else l = mid + 1;
mid = (l + r) / 2;
}
return mid + 1; //映射到1...n
}
void insert(){
int x, c;
cin >> x >> c;
alls.push_back(x);
//将输入转化为插入操作
add.push_back({x, c});
}
void search(){
int l, r;
cin >> l >> r;
alls.push_back(l);
alls.push_back(r);
query.push_back({l, r});
}
int main(){
cin >> n >> m;
for (int i = 1; i <= n; i ++){
int x, c;
x = i;
cin >> c;
alls.push_back(x);
add.push_back({x, c});
}
int flag;
while (m --){
cin >> flag;
if (flag == 1){
insert();
}
else if (flag == 2){
search();
}
}
sort(alls.begin(), alls.end());
alls.erase(unique(alls.begin(), alls.end()), alls.end());
//映射
for (auto item : add){
int x = find(item.first);
a[x] += item.second;
//cout << item.first << " " << x << " " << a[x] << endl;
}
/**/
for (int i = 1; i <= alls.size(); i ++){
s[i] += s[i-1] + a[i];
}
for (auto item : query){
int l = find(item.first);
int r = find(item.second);
//cout << l << " " << r << endl;
cout << s[r] - s[l-1] << endl;
}
}