#include <iostream>
using namespace std;
const int MAXN = 100005;
int n;
long long x[4 * MAXN], y[4 * MAXN], w[4 * MAXN]={0},a[4 * MAXN];
long long s(int ax, int ay, int len) {
int an = ax + ay * (len - 1ll);
return 1ll * (ax + an) * len / 2;
}
void maketag(int u, int l, int r, int addx, int addy) {
x[u] += addx;y[u] += addy;
w[u] += s(addx, addy, r - l + 1);
}
void pushdown(int u, int l, int r) {
int mid = (l + r) / 2;
if (x[u] && y[u]) {
maketag(u * 2, l, mid, x[u], y[u]);
maketag(u * 2 + 1, mid + 1, r, x[u] + y[u] * (mid - l + 1), y[u]);
x[u] = y[u] = 0;
}
}
void pushup(int u) {
w[u] = w[u * 2] + w[u * 2 + 1];
}
void build(int u,int l,int r){
if(l==r){
w[u]=a[l];
return;
}
int mid=(l+r)>>1;
build(u*2,l,mid);build(u*2+1,mid+1,r);
pushup(u);
}
void update(int u, int l, int r, int ql, int qr, int addx, int addy) {
if (ql <= l && r <= qr) {
maketag(u, l, r, addx + (l - ql) * addy, addy);
return;
}
pushdown(u, l, r);
int mid = (l + r) / 2;
if (ql <= mid) {
update(u * 2, l, mid, ql, qr, addx, addy);
}
if (qr > mid) {
update(u * 2 + 1, mid + 1, r, ql, qr, addx, addy);
}
pushup(u);
}
long long query(int u, int l, int r, int ql, int qr) {
if (ql <= l && r <= qr) {
return w[u];
}
pushdown(u, l, r);
int mid = (l + r) / 2;
long long ans = 0;
if (ql <= mid) {
ans += query(u * 2, l, mid, ql, qr);
}
if (qr > mid) {
ans += query(u * 2 + 1, mid + 1, r, ql, qr);
}
return ans;
}
int main() {
int m;
cin >> n >> m;
for(int i=1;i<=n;i++)cin>>a[i];
build(1,1,n);
for (int i = 0; i < m; i++) {
int op;
cin >> op;
if (op == 1) {
int l, r, k, d;
cin >> l >> r >> k >> d;
update(1, 1, n, l, r, k, d);
} else if (op == 2) {
int p;
cin >> p;
cout << query(1, 1, n, p, p) << endl;
}
}
return 0;
}