#include<bits/stdc++.h>
using namespace std;
#define int long long
const int nn=1e5+5,db=1e5;
int n,m,cnt;
struct node{
int x,y,id,ans,ny,p;
bool type;
};
node t[nn*5];
bool cmp(node l1,node l2){
if(l1.x==l2.x) return l1.y<l2.y;
return l1.x<l2.x;
}
bool cmp2(node l1,node l2){
return l1.id<l2.id;
}
bool cmp3(node l1,node l2){
return l1.y<l2.y;
}
int tree[nn];
void add(int x,int p){
for(int i=x;i<=db;i+=i&(-i))tree[i]+=p;
}
int query(int x){
int ans=0;
for(int i=x;i>=1;i-=i&(-i)) ans+=tree[i];
return ans;
}
signed main()
{
std::ios::sync_with_stdio(false),std::cin.tie(nullptr);
cin>>n>>m;
for(int i=1;i<=n;i++){
int x,y,p;
cin>>x>>y>>p;
cnt++,t[cnt].x=x,t[cnt].y=y,t[cnt].id=cnt,t[cnt].type=0,t[cnt].p=p;
}
for(int i=1;i<=m;i++){
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
cnt++,t[cnt].x=x2,t[cnt].y=y2,t[cnt].id=cnt,t[cnt].type=1;
cnt++,t[cnt].x=x1-1,t[cnt].y=y2,t[cnt].id=cnt,t[cnt].type=1;
cnt++,t[cnt].x=x2,t[cnt].y=y1-1,t[cnt].id=cnt,t[cnt].type=1;
cnt++,t[cnt].x=x1-1,t[cnt].y=y1-1,t[cnt].id=cnt,t[cnt].type=1;
}
sort(t+1,t+cnt+1,cmp3);
t[1].ny=1;
for(int i=2;i<=cnt;i++){
if(t[i].y==t[i-1].y) t[i].ny=t[i-1].ny;
else t[i].ny=t[i-1].ny+1;
}
sort(t+1,t+cnt+1,cmp);
for(int i=1;i<=cnt;i++){
if(t[i].type==0) add(t[i].ny,t[i].p);
else t[i].ans=query(t[i].ny);
}
sort(t+1,t+cnt+1,cmp2);
for(int i=1;i<=m;i++){
int ans=t[n+(i-1)*4+1].ans-t[n+(i-1)*4+2].ans-t[n+(i-1)*4+3].ans+t[n+i*4].ans;
cout<<ans<<endl;
}
return 0;
}
诡异20pts