#include<cstdio>
#include<iostream>
using namespace std;
class BinaryIndexedTree
{
private:
int size;
int s[500005];
int GetLowBit(int x)
{
return x & -x;
}
public:
BinaryIndexedTree(int SizeOfTree)
{
size = SizeOfTree;
}
void Add(int pos, int x)
{
int cur = pos;
while(cur <= size)
{
s[cur] += x;
cur += GetLowBit(cur);
}
return;
}
int PrefixSum(int r)
{
int sum = 0;
int cur = r;
while(cur > 0)
{
sum += s[cur];
cur -= GetLowBit(cur);
}
return sum;
}
int Query(int l, int r)
{
return PrefixSum(r) - PrefixSum(l - 1);
}
};
int main()
{
int n, m;
cin >> n >> m;
BinaryIndexedTree A(n);
for(int i = 1; i <= n; i++)
{
int Ai;
cin >> Ai;
A.Add(i, Ai);
}
for(int i = 1; i <= m; i++)
{
int op;
cin >> op;
if(op == 1)
{
int x, k;
cin >> x >> k;
A.Add(x, k);
}
if(op == 2)
{
int x, y;
cin >> x >> y;
int ans = A.Query(x, y);
printf("%d\n", ans);
}
}
return 0;
}