Dakara

Time limit: 1s Memory limit: 256MB Input: Output:

Dacii liberi și-au ascuns comoara în una dintre cele NN camere ale cetății. Fiecare cameră este păzită de un loial slujitor. Te-ai infiltrat în cetate cu scopul de a găsi comoara, așa că începi să bați la uși.

Dacă ai bate la ușa ii, slujitorul ți-ar spune dacă comoara se află într-o cameră din stânga camerei ii, din dreapta camerei ii sau chiar în camera ii. Slujitorul este om bun, dar o mică atenție îl va face să-și aducă mai bine aminte unde se află comoara, așa că îl vei răsplati complet voluntar cu 2Pi2^{P_i} kosoni. De vreme ce vrei să oferi o experiență unică fiecărui slujitor, valorile PiP_i vor forma o permutare a mulțimii {1,,N}\{1, \dots, N\}.

Pentru ca totul să meargă fără probleme, îți imaginezi QQ scenarii de tipul: "Dacă comoara se găsește în intervalul de camere [l,r][l, r], care ar fi numărul minim de kosoni pe care îi voi oferi slujitorilor, în cel mai rău caz, pentru a găsi comoara?". De vreme ce răspunsul poate să fie foarte mare, se cere restul său la împărțirea cu 109+710^9 + 7.

Date de intrare

Pe prima linie se află numerele NN și QQ. Pe următoarea linie se află NN numere naturale nenule distincte. Pe următoarele QQ linii se găsesc câte două numere lil_i, rir_i reprezentând scenariul ii.

Date de ieșire

Se vor afișa QQ linii, pe linia ii se va găsi răspunsul pentru cel de-al ii-lea scenariu, modulo 109+710^9 + 7.

Restricții

  • 1N,Q200 0001 \leq N, Q \leq 200 \ 000
  • 1PiN1 \leq P_i \leq N
  • Șirul PP este o permutare.
  • 1liriN1 \leq l_i \leq r_i \leq N

Subtask 1 (3 puncte)

  • 1N,Q501 \leq N, Q \leq 50

Subtask 2 (6 puncte)

  • 1N,Q2001 \leq N, Q \leq 200

Subtask 3 (23 puncte)

  • 1N,Q1 0001 \leq N, Q \leq 1 \ 000

Subtask 4 (52 puncte)

  • 1Q1001 \leq Q \leq 100

Subtask 5 (16 puncte)

  • Fără restricții suplimentare

Exemple

stdin

8 3
3 5 8 1 6 7 2 4 
2 7
5 6
3 8

stdout

70
64
68

stdin

10 3
2 8 3 9 7 10 5 6 4 1
1 10
6 6
4 5

stdout

168
0
128

Log in or sign up to be able to send submissions!