#include #include #include #include int main() { intmax_t p; int q; scanf("%jd %d", &p, &q); std::vector d{0}; { std::vector tmp; for (intmax_t i = 1; i*i <= p; ++i) { d.push_back(i); if (i*i < p) tmp.push_back(p/i); } d.insert(d.end(), tmp.rbegin(), tmp.rend()); } std::vector s{0}; for (size_t i = 1; i < d.size(); ++i) { intmax_t dl = d[i-1]+1; intmax_t dr = d[i]; intmax_t sum = ((p % dl) + (p % dr)) * (dr-dl+1) / 2; s.push_back(sum); } s.insert(s.begin(), 0); for (size_t i = 1; i < s.size(); ++i) s[i] += s[i-1]; auto f = [&](intmax_t r) -> intmax_t { if (r == 0) return 0; auto it = std::upper_bound(d.begin(), d.end(), r); size_t j = it - d.begin(); intmax_t dl = it[-1]+1; intmax_t dr = r; return s[j] + ((p % dl) + (p % dr)) * (dr-dl+1) / 2; }; for (int i = 0; i < q; ++i) { intmax_t l, r; scanf("%jd %jd", &l, &r); printf("%jd\n", f(r)-f(l-1)); } }