#icpc2013summerday2g. [icpc2013summer_day2_g]Perm Query

[icpc2013summer_day2_g]Perm Query

1,2,,N\\{1,  2,  … ,  N\\}の順列 (p(1),p(2),,p(n))(p(1),  p(2),  … ,  p(n)) が与えられる. (li,ri)(l_i,  r_i) からなるクエリが QQ 個与えられるので,各クエリに対して以下の擬似コードによる処理結果を出力せよ.

  1. ret:=0ret   :=   0, (x(1),x(2),,x(N)):=(1,2,,N)(x(1),  x(2),  … ,  x(N))  :=  (1,  2,  … ,  N) とおく.
  2. i1,2,,Ni   ∈ \\{1,   2,  … ,   N\\} について y(i):=p(x(i))y(i) := p(x(i)) とする.
  3. i1,2,,Ni   ∈ \\{1,   2,  … ,   N\\} について x(i)=y(i)x(i)   =  y(i)とする.
  4. ret:=ret+x(li)+x(li+1)++x(ri)ret   :=  ret + x(l_i) + x(l_i+1) + …  + x(r_i)
  5. もし $(x(l_i),  x(l_i+1),  … ,  x(r_i)) = (l_i,  l_i+1,  … ,  r_i)$ なら (ret(ret mod 109+7)10^9+7) を出力して終了する.そうでないなら 処理2に戻る.

入力形式

入力は以下の形式で与えられる

NN QQ p(1)p(1) p(2)p(2) ...... p(N)p(N) l1l_1 r1r_1 ...... lQl_Q rQr_Q

出力形式

各クエリに対する出力を1行ずつ出力せよ.

制約

  • 1N1051 ≤ N ≤ 10^5
  • 1Q1041 ≤ Q ≤ 10^4
  • (p(1),p(2),,p(N))(p(1),  p(2),  … ,  p(N))(1,2,,N)(1,  2,  … ,  N) の順列になっている.
  • ii に対して,ある 1k401 ≤ k ≤ 40 が存在して,pk(i)=ip^k(i)=i となる.ここで,pk(i)p^k(i)p(p(p(p(i))))p(p(p(… p(i)… )))ppkk 回現れるもの.
  • 1liriN1 ≤ l_i   ≤   r_i   ≤ N

入出力例

入力例 1


5 2
5 1 2 3 4
1 1
2 4

出力例 1


15
45

擬似コード中の順列(x(1),x(2),,x(N))(x(1),   x(2),   … ,  x(N))は以下のように変化する.


1 2 3 4 5
5 1 2 3 4
4 5 1 2 3
3 4 5 1 2
2 3 4 5 1
1 2 3 4 5

入力例 2


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

出力例 2


660
90
6
178
67