Perm Query

아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

1,2,,N\\{1,  2,  … ,  N\\}の順列 (p(1),p(2),,p(n))(p(1),  p(2),  … ,  p(n)) が与えられる. (l_i,r_i)(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(l_i)+x(l_i+1)++x(r_i)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)(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)

l_1l\_1 r_1r\_1

......

l_Ql\_Q r_Qr\_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 回現れるもの.
  • 1l_ir_iN1 ≤ l\_i   ≤   r\_i   ≤ N