#D11051. RMQ and RAQ

    ID: 9183 Type: Default 1000ms 268MiB

RMQ and RAQ

RMQ and RAQ

Write a program which manipulates a sequence AA = {a0,a1,...,an1a_0, a_1, ..., a_{n-1}} with the following operations:

  • add(s,t,x)add(s, t, x) : add xx to as,as+1,...,ata_s, a_{s+1}, ..., a_t.
  • find(s,t)find(s, t) : report the minimum value in as,as+1,...,ata_s, a_{s+1}, ..., a_t.

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

Constraints

  • 1n1000001 ≤ n ≤ 100000
  • 1q1000001 ≤ q ≤ 100000
  • 0st<n0 ≤ s ≤ t < n
  • 1000x1000-1000 ≤ x ≤ 1000

Input

nn qq query1query_1 query2query_2 : queryqquery_q

In the first line, nn (the number of elements in AA) and qq (the number of queries) are given. Then, iith query queryiquery_i is given in the following format:

0 ss tt xx

or

1 ss tt

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

Output

For each findfind query, print the minimum value.

Example

Input

6 7 0 1 3 1 0 2 4 -2 1 0 5 1 0 1 0 3 5 3 1 3 4 1 0 5

Output

-2 0 1 -1

inputFormat

Input

nn qq query1query_1 query2query_2 : queryqquery_q

In the first line, nn (the number of elements in AA) and qq (the number of queries) are given. Then, iith query queryiquery_i is given in the following format:

0 ss tt xx

or

1 ss tt

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

outputFormat

Output

For each findfind query, print the minimum value.

Example

Input

6 7 0 1 3 1 0 2 4 -2 1 0 5 1 0 1 0 3 5 3 1 3 4 1 0 5

Output

-2 0 1 -1

样例

6 7
0 1 3 1
0 2 4 -2
1 0 5
1 0 1
0 3 5 3
1 3 4
1 0 5
-2

0 1 -1

</p>