#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int N = 510;
const int Mod = 666623333;
int n;
int m;
struct ran {
int l;
int r;
};
ran rans[N];
int nums[N][N];
long long sums[N][N];
bool flag[Mod];
long long pow_quick (long long x, long long y) {
long long ans = 1;
while (y) {
if (y & 1) {
ans = ans * x % Mod;
}
x = x * x % Mod;
y >>= 1;
}
return ans;
}
long long inv (long long num) {
return pow_quick (num, Mod - 2);
}
long long fact (long long num) {
long long ans = 1;
for (int i = 2; i <= num; i++) {
ans = ans * i % Mod;
}
return ans;
}
int main () {
freopen ("interval.in", "r", stdin);
freopen ("interval.out", "w", stdout);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> rans[i].l >> rans[i].r;
}
for (int i = 1; i <= n; i++) {
memset (flag, 0, sizeof (flag));
long long cc = 0;
for (int j = i; j <= n; j++) {
for (int k = rans[j].l; k < rans[j].r; k++) {
if (!flag[k]) {
flag[k] = true;
cc++;
}
}
nums[i][j] = cc;
}
}
for (int i = 1; i <= m; i++) {
int l, r;
cin >> l >> r;
long long cc = 0;
for (int j = l; j <= r; j++) {
for (int k = j; k <= r; k++) {
cc = (cc + nums[j][k]) % Mod;
}
}
int len = r - l + 1;
cout << cc * inv ((len + 1) * len % Mod * inv (2) % Mod) % Mod << endl;
}
return 0;
}