//不要一个循环把所有事情全部解决,可以多写几个循环,不至于把代码写的过于高效,这样不会导致测试样例全部正确,提交时一个不对
//这道题目m次查询,m个答案
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const ll p=1e9+7;
const int N=1e5+9;
ll a[6][N],pre[6][N];
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[1][i];
}
for(int i=1;i<=4;i++){
for(int j=1;j<=n;j++){
a[i+1][j]=a[i][j]*a[1][j]%p;
}
}
for(int i=1;i<=5;i++){
for(int j=1;j<=n;j++){
pre[i][j]=pre[i][j-1]+a[i][j];
}
}
while(m--){
int l,r,k;cin>>l>>r>>k;
cout<<(pre[k][r]-pre[k][l-1])%p<<endl;
}
return 0;
}