using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("2 3 1");
WillReturn.Add("1 1");
WillReturn.Add("1 2");
WillReturn.Add("2 2");
WillReturn.Add("1 2");
//3
}
else if (InputPattern == "Input2") {
WillReturn.Add("10 3 2");
WillReturn.Add("1 5");
WillReturn.Add("2 8");
WillReturn.Add("7 10");
WillReturn.Add("1 7");
WillReturn.Add("3 10");
//1
//1
}
else if (InputPattern == "Input3") {
WillReturn.Add("10 10 10");
WillReturn.Add("1 6");
WillReturn.Add("2 9");
WillReturn.Add("4 5");
WillReturn.Add("4 7");
WillReturn.Add("4 7");
WillReturn.Add("5 8");
WillReturn.Add("6 6");
WillReturn.Add("6 7");
WillReturn.Add("7 9");
WillReturn.Add("10 10");
WillReturn.Add("1 8");
WillReturn.Add("1 9");
WillReturn.Add("1 10");
WillReturn.Add("2 8");
WillReturn.Add("2 9");
WillReturn.Add("2 10");
WillReturn.Add("3 8");
WillReturn.Add("3 9");
WillReturn.Add("3 10");
WillReturn.Add("1 10");
//7
//9
//10
//6
//8
//9
//6
//7
//8
//10
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int[] wkArr = { };
Action<string> SplitAct = pStr =>
wkArr = pStr.Split(' ').Select(X => int.Parse(X)).ToArray();
SplitAct(InputList[0]);
int N = wkArr[0];
int M = wkArr[1];
int UB = N;
int[,] RuisekiwaArr = new int[UB + 1, UB + 1];
foreach (string EachStr in InputList.Skip(1).Take(M)) {
SplitAct(EachStr);
RuisekiwaArr[wkArr[0], wkArr[1]]++;
}
//PrintArr(RuisekiwaArr);
// 横方向の累積和を求める
for (int LoopR = 0; LoopR <= UB; LoopR++) {
for (int LoopL = 0; LoopL <= UB; LoopL++) {
if (LoopL > 0) {
RuisekiwaArr[LoopL, LoopR] += RuisekiwaArr[LoopL - 1, LoopR];
}
}
}
// 縦方向の累積和を求める
for (int LoopL = 0; LoopL <= UB; LoopL++) {
for (int LoopR = 0; LoopR <= UB; LoopR++) {
if (LoopR > 0) {
RuisekiwaArr[LoopL, LoopR] += RuisekiwaArr[LoopL, LoopR - 1];
}
}
}
// クエリに回答する
foreach (string EachStr in InputList.Skip(1 + M)) {
SplitAct(EachStr);
int QueryL = wkArr[0];
int QueryR = wkArr[1];
int Answer = RuisekiwaArr[QueryR, QueryR];
Answer -= RuisekiwaArr[QueryL - 1, QueryR];
Answer -= RuisekiwaArr[QueryR, QueryL - 1];
Answer += RuisekiwaArr[QueryL - 1, QueryL - 1];
Console.WriteLine(Answer);
}
}
static void PrintArr(int[,] pArr)
{
for (int Y = 0; Y <= pArr.GetUpperBound(1); Y++) {
for (int X = 0; X <= pArr.GetUpperBound(0); X++) {
Console.Write("{0},", pArr[X, Y]);
}
Console.WriteLine();
}
}
}