Virtual contest is a way to take part in past contest, as close as possible to participation on time. It is supported only ACM-ICPC mode for virtual contests.
If you've seen these problems, a virtual contest is not for you - solve these problems in the archive.
If you just want to solve some problem from a contest, a virtual contest is not for you - solve this problem in the archive.
Never use someone else's code, read the tutorials or communicate with other person during a virtual contest.

No tag edit access

E. Numbers on the blackboard

time limit per test

2 secondsmemory limit per test

512 megabytesinput

standard inputoutput

standard outputA sequence of *n* integers is written on a blackboard. Soon Sasha will come to the blackboard and start the following actions: let *x* and *y* be two adjacent numbers (*x* before *y*), then he can remove them and write *x* + 2*y* instead of them. He will perform these operations until one number is left. Sasha likes big numbers and will get the biggest possible number.

Nikita wants to get to the blackboard before Sasha and erase some of the numbers. He has *q* options, in the option *i* he erases all numbers to the left of the *l*_{i}-th number and all numbers to the right of *r*_{i}-th number, i. e. all numbers between the *l*_{i}-th and the *r*_{i}-th, inclusive, remain on the blackboard. For each of the options he wants to know how big Sasha's final number is going to be. This number can be very big, so output it modulo 10^{9} + 7.

Input

The first line contains two integers *n* and *q* (1 ≤ *n*, *q* ≤ 10^{5}) — the number of integers on the blackboard and the number of Nikita's options.

The next line contains *n* integers *a*_{1}, *a*_{2}, ..., *a*_{n} ( - 10^{9} ≤ *a*_{i} ≤ 10^{9}) — the sequence on the blackboard.

Each of the next *q* lines contains two integers *l*_{i} and *r*_{i} (1 ≤ *l*_{i} ≤ *r*_{i} ≤ *n*), describing Nikita's options.

Output

For each option output Sasha's result modulo 10^{9} + 7.

Examples

Input

3 3

1 2 3

1 3

1 2

2 3

Output

17

5

8

Input

3 1

1 2 -3

1 3

Output

1000000006

Input

4 2

1 1 1 -1

1 4

3 4

Output

5

1000000006

Note

In the second sample Nikita doesn't erase anything. Sasha first erases the numbers 1 and 2 and writes 5. Then he erases 5 and -3 and gets -1. -1 modulo 10^{9} + 7 is 10^{9} + 6.

Codeforces (c) Copyright 2010-2018 Mike Mirzayanov

The only programming contests Web 2.0 platform

Server time: Jul/19/2018 20:40:22 (d3).

Desktop version, switch to mobile version.

User lists

Name |
---|