#include<iostream>
#include<cstdio>
using namespace std;
long long n,m;
long long a[500005];
struct edge{
long long l,r,lazy,num;
}tree[4000005];
void build(long long p,long long l,long long r){
tree[p].l=l,tree[p].r=r;
tree[p].lazy=0;
if(l==r){
tree[p].num=a[l];
return;
}
long long mid=(l+r)>>1;
build(p*2,l,mid);
build(p*2+1,mid+1,r);
tree[p].num=tree[p*2].num+tree[p*2+1].num;
return;
}
void putdown(long long p){
tree[p*2].lazy+=tree[p].lazy,tree[p*2+1].lazy+=tree[p].lazy;
tree[p*2].num+=(tree[p].lazy*(tree[p*2].r-tree[p*2].l+1));
tree[p*2+1].num+=(tree[p].lazy*(tree[p*2+1].r-tree[p*2+1].l+1));
tree[p].lazy=0;
return;
}
void qjj(long long p,long long x,long long y,long long k){
if(tree[p].lazy!=0) putdown(p);
if(tree[p].l>=x&&tree[p].r<=y){
tree[p].lazy+=k;
tree[p].num+=k*(tree[p].r-tree[p].l+1);
return;
}
long long mid=(tree[p].l+tree[p].r)>>1;
if(x<=mid&&tree[p].l<=y)
qjj(p*2,x,y,k);
if(x<=tree[p].r&&y>mid)
qjj(p*2+1,x,y,k);
tree[p].num=tree[p*2].num+tree[p*2+1].num;
return;
}
void ddh(long long p,long long s){
if(tree[p].lazy!=0) putdown(p);
if(tree[p].l==tree[p].r&&tree[p].l==s){
cout<<tree[p].num<<endl;
}
long long mid=(tree[p].l+tree[p].r)>>1;
if(tree[p].l<=s&&mid>=s){
ddh(p*2,s);
}
if(mid+1<=s&&s<=tree[p].r){
ddh(p*2+1,s);
}
}
int main(){
cin>>n>>m;
for(long long i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
for(long long i=1;i<=m;i++){
char ch;
cin>>ch;
if(ch=='1'){
long long x,y,k;
cin>>x>>y>>k;
qjj(1,x,y,k);
}
if(ch=='2'){
long long x;
cin>>x;
ddh(1,x);
}
}
return 0;
}
70分,有三个点re,求助