#include <stdio.h>
#include <stdlib.h>

#define MAX_N 100005

// 线段树节点结构体
typedef struct TreeNode {
    int left;
    int right;
    long long sum;
    struct TreeNode* leftChild;
    struct TreeNode* rightChild;
} TreeNode;

// 构建线段树
TreeNode* buildTree(int arr[], int left, int right) {
    TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
    node->left = left;
    node->right = right;
    if (left == right) {
        node->sum = arr[left];
        node->leftChild = node->rightChild = NULL;
    } else {
        int mid = left + (right - left) / 2;
        node->leftChild = buildTree(arr, left, mid);
        node->rightChild = buildTree(arr, mid + 1, right);
        node->sum = node->leftChild->sum + node->rightChild->sum;
    }
    return node;
}

// 更新线段树中某个节点的值(用于单点修改操作)
void update(TreeNode* node, int index, int val) {
    if (node->left == node->right) {
        node->sum += val;
        return;
    }
    int mid = node->left + (node->right - node->left) / 2;
    if (index <= mid) {
        update(node->leftChild, index, val);
    } else {
        update(node->rightChild, index, val);
    }
    node->sum = node->leftChild->sum + node->rightChild->sum;
}

// 查询区间和
long long query(TreeNode* node, int left, int right) {
    if (node->left >= left && node->right <= right) {
        return node->sum;
    }
    int mid = node->left + (node->right - node->left) / 2;
    long long sum = 0;
    if (left <= mid) {
        sum += query(node->leftChild, left, right);
    }
    if (right > mid) {
        sum += query(node->rightChild, left, right);
    }
    return sum;
}

// 释放线段树节点内存
void freeTree(TreeNode* node) {
    if (node == NULL) return;
    freeTree(node->leftChild);
    freeTree(node->rightChild);
    free(node);
}

int main() {
    int n, q;
    scanf("%d%d", &n, &q);
    int arr[MAX_N];
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }
    TreeNode* root = buildTree(arr, 0, n - 1);
    for (int i = 0; i < q; i++) {
        int op, l, r, index, val;
        scanf("%d", &op);
        if (op == 1) {
            scanf("%d%d", &index, &val);
            update(root, index - 1, val);
        } else {
            scanf("%d%d", &l, &r);
            long long result = query(root, l - 1, r - 1);
            printf("%lld\n", result);
        }
    }
    freeTree(root);
    return 0;
}