#include<cstdio>
#include<map>
#define fo(i,l,r) for (auto i=l,_end=r;i<=_end;++i)
#define fd(i,l,r) for (auto i=l,_end=r;i>=_end;--i)
using namespace std;
const int N=1e5+10;
int n,m;
map<int,int> G; //记录离散化映射的map
int l[3*N],s[3*N]; //s为l的前缀和数组,l为离散化后的数轴
struct Operation { //操作
int x,c;
void read() {
scanf("%d%d",&x,&c);
}
void insert() { //坐标x插入到map
G[x]=0;
}
void add() { //增量c增加到l
l[G[x]]+=c;
}
};
struct Query { //询问
int l,r;
void read() {
scanf("%d%d",&l,&r);
}
void insert() { //坐标l与r插入到map
G[l]=0;
G[r]=0;
}
void ans() {
printf("%d\n",s[G[r]]-s[G[l]-1]);
}
};
Operation o[N];
Query q[N];
int main() {
scanf("%d%d",&n,&m);
fo(i,1,n) o[i].read(), o[i].insert(); //将操作存储,并离散化到map
fo(i,1,m) q[i].read(), q[i].insert(); //将询问存储,并离散化到map
int cnt=0;
for (auto &p: G) { //按键从小到大枚举map,并编以编号
p.second=++cnt;
}
fo(i,1,n) o[i].add(); //操作到离散化后的数轴
fo(i,1,3*N-1) s[i]=s[i-1]+l[i]; //求其前缀和
fo(i,1,m) q[i].ans(); //回答所有询问
}