1 이상 N 이하의 정수가 한 번씩 등장하는 길이 N의 수열 A가 주어진다.
수열 A에 대한 RMQ란 보통 Range Minimum Query 또는 Range Maximum Query를 뜻하는 말로, 1≤l≤r≤N인 l과 r이 주어졌을 때 min(A_l,⋯!,A_r) 또는 max(A_l,⋯!,A_r)를 구하는 쿼리를 의미한다.
어느 쿼리도 포기하지 못했던 종영이는 새로운 RMQ를 만들기로 했다. 종영이가 새로 만든 RMQ(Range Mueonga Query)는 RMQ(l,r)=min(A_l,⋯!,A_r)×max(A_l,⋯!,A_r)를 의미한다.
모든 쿼리 값들을 기억하기 위해, N행 N열의 2차원 배열 B에 대해 i행 j열의 위치에 해당하는 값 B_i,j에 i≤j라면 RMQ(i,j)를, i>j라면 0을 써 놓았다.
쿼리 중독증인 종영이는 이제 B에서 2차원 쿼리를 날리고 싶어졌다. 종영이를 위해 1≤l≤r≤N이고 1≤s≤e≤N인 네 정수 l, r, s, e가 주어질 때마다 l≤i≤r이고 s≤j≤e인 모든 i, j에 대해 B_i,j의 합을 구해주자.
첫째 줄에 N과 Q가 공백으로 구분되어 주어진다. (1≤N≤150,000,1≤Q≤150,000)
둘째 줄에 A_1, ⋯, A_N이 공백으로 구분되어 주어진다. (1≤A_i≤N)
셋째 줄부터 Q개의 줄에 걸쳐 쿼리들이 주어진다. 각 쿼리에서는 l, r, s, e가 공백으로 구분되어 주어진다. (1≤l≤r≤N, 1≤s≤e≤N)
각 줄에 쿼리의 답을 109+7로 나눈 나머지를 출력한다.