Problem: Write a program which manipulates a sequence A = {a1, a2, . . . , an} with the following operations:

* add(s, t, x): add x to as, as+1, ..., at.
* get(i): output the value of ai.



Note that the initial values of ai (i = 1, 2, . . . , n) are 0.

Constraints

* 1 ≤ n ≤ 100000
* 1 ≤ q ≤ 100000
* 1 ≤ s ≤ t ≤ n
* 1 ≤ i ≤ n
* 0 ≤ x ≤ 1000

Input


n q
query1
query2
:
queryq


In the first line, n (the number of elements in A) and q (the number of queries) are given. Then, ith query queryi is given in the following format:


0 s t x


or


1 t


The first digit represents the type of the query. '0' denotes add(s, t, x) and '1' denotes get(i).

Output

For each get operation, print the value.

Examples

Input

3 5
0 1 2 1
0 2 3 2
0 3 3 3
1 2
1 3


Output

3
5


Input

4 3
1 2
0 1 4 1
1 2


Output

0
1

Solution (in CPP):

Solution:
#include<iostream>
using namespace std;
int d[1<<18],a,b,c,n,q;
void m(int l,int r,int k){
	if(r<=a||b<=l)return;
	if(a<=l&&r<=b)d[k]+=c;
	else{m(l,(l+r)/2,k*2+1);m((l+r)/2,r,k*2+2);}
}
int main(){
	cin>>a>>q;n=4;
	while(n<a)n*=2;a=n*2;
	while(a--)d[a]=0;
	while(q--){
		cin>>a;
		if(a){
			cin>>a;a+=n-1,b=d[a];
			while(a)a=(a-1)/2,b+=d[a];
			cout<<b<<endl;
		}
		else{cin>>a>>b>>c;b++;m(0,n,0);}
	}
	return 0;
}