RMQ

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

문제

11 이상 NN 이하의 정수가 한 번씩 등장하는 길이 NN의 수열 AA가 주어진다.

수열 AA에 대한 RMQ란 보통 Range Minimum Query 또는 Range Maximum Query를 뜻하는 말로, 1lrN1 \le l \le r \le Nllrr이 주어졌을 때 min(A_l,!,A_r)\min(A\_l,\cdots\\!,A\_r) 또는 max(A_l,!,A_r)\max(A\_l,\cdots\\!,A\_r)를 구하는 쿼리를 의미한다.

어느 쿼리도 포기하지 못했던 종영이는 새로운 RMQ를 만들기로 했다. 종영이가 새로 만든 RMQ(Range Mueonga Query)는 RMQ(l,r)=min(A_l,!,A_r)×max(A_l,!,A_r)RMQ(l,r)=\min(A\_l,\cdots\\!,A\_r) \times \max(A\_l,\cdots\\!,A\_r)를 의미한다.

모든 쿼리 값들을 기억하기 위해, NNNN열의 2차원 배열 BB에 대해 iijj열의 위치에 해당하는 값 B_i,jB\_{i,j}iji \le j라면 RMQ(i,j)RMQ(i,j)를, i>ji>j라면 00을 써 놓았다.

쿼리 중독증인 종영이는 이제 BB에서 2차원 쿼리를 날리고 싶어졌다. 종영이를 위해 1lrN1 \le l \le r \le N이고 1seN1 \le s \le e \le N인 네 정수 ll, rr, ss, ee가 주어질 때마다 lirl \le i \le r이고 sjes \le j \le e인 모든 ii, jj에 대해 B_i,jB\_{i,j}의 합을 구해주자.

입력

첫째 줄에 NNQQ가 공백으로 구분되어 주어진다. (1N150,000,1Q150,000)(1 \le N \le 150\\,000, 1 \le Q \le 150\\,000)

둘째 줄에 A_1A\_1, \cdots, A_NA\_N이 공백으로 구분되어 주어진다. (1A_iN)(1 \le A\_i \le N)

셋째 줄부터 QQ개의 줄에 걸쳐 쿼리들이 주어진다. 각 쿼리에서는 ll, rr, ss, ee가 공백으로 구분되어 주어진다. (1lrN1 \le l \le r \le N, 1seN1 \le s \le e \le N)

출력

각 줄에 쿼리의 답을 109+710^9+7로 나눈 나머지를 출력한다.