#include<bits/stdc++.h>
using namespace std;
const int maxn=10010;
int s[maxn*4],col[maxn*4];//懒标记和线段树
void down(int p,int l,int r)
{
if(col[p])//当前节点有懒标记
{
int mid=(l+r)/2;
s[p*2]+=col[p]*(mid-l+1);//左区间元素个数乘以加上的值
s[p*2+1]+=col[p]*(r-mid);//右区间元素个数乘以加上的值
col[p*2]+=col[p];
col[p*2+1]+=col[p];
col[p]=0;//取消当前懒标记
}
}
void up(int p)
{
s[p]=s[p*2]+s[p*2+1];
}
void modify(int p,int l,int r,int x,int y,int c)
{
if(l>=x&&r<=y)//找到了更新区间
{
s[p]+=(r-l+1)*c;//闭区间所以+1
col[p]+=c;//打上懒标记
return;
}
down(p,l,r);//下放懒标记
int mid=(r+l)/2;
if(x<=mid)//若目标在左区间
{
modify(p*2,l,mid,x,y,c);
}
if(y>mid)//若目标在右区间
{
modify(p*2+1,mid+1,r,x,y,c);
}
up(p);//回溯时向上更新
}
int query(int p,int l,int r,int x,int y)
{
if(l>=x&&r<=y)
{
return s[p];
}
down(p,l,r);//下放懒标记
int mid=(r+l)/2,res=0;
if(x<=mid)
{
res+=query(p*2,l,mid,x,y);
}
if(y>mid)
{
res+=query(p*2+1,mid+1,r,x,y);
}//答案有可能夹在两个区间之间
return res;//记得返回答案
}
int main()
{
memset(s,0,sizeof(s));
memset(col,0,sizeof(col));
int n,t;
cin>>n>>t;//区间1~n和修改数据组数
for(int i=1;i<=n;i++)
{
modify(1,1,n,i,i,0);
}
for(int i=1;i<=t;i++)
{
int a,b,c;
cin>>a>>b>>c;
modify(1,1,n,a,b,c);
}
int m;//查找数据组数
cin>>m;
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
cout<<query(1,1,n,x,y)<<endl;
}
return 0;
}