using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var c = NList; var (p, q) = (c[0], c[1]); var query = NArr(q); WriteLine(string.Join("\n", ModList(p, q, query))); } static long[] ModList(int p, int q, int[][] query) { var rp = (int)Math.Sqrt(p); var dic = new Dictionary>(); for (var i = 1; p / i > rp; ++i) { if (dic.ContainsKey(p / i)) dic[p / i].Add(i); else dic[p / i] = new List() { i }; } var list1 = dic.Keys.ToList(); list1.Sort((l, r) => r.CompareTo(l)); var list2 = new List(); for (var i = rp; i > 0; --i) list2.Add(i); var max = new int[list1.Count + list2.Count]; var count = new int[list1.Count + list2.Count]; var sum = new long[list1.Count + list2.Count]; for (var i = 0; i < list1.Count; ++i) { count[i] = dic[list1[i]].Count; foreach (var li in dic[list1[i]]) sum[i] += p % li; max[i] = dic[list1[i]][^1]; } for (var i = 0; i < list2.Count; ++i) { var le = p / list2[i] - p / (list2[i] + 1); var fi = p % list2[i]; count[i + list1.Count] = le; sum[i + list1.Count] = (long)fi * le + (long)list2[i] * le * (le - 1) / 2; max[i + list1.Count] = p / list2[i]; } var cum = new long[sum.Length]; cum[0] = sum[0]; for (var i = 1; i < cum.Length; ++i) cum[i] = cum[i - 1] + sum[i]; var ans = new long[q]; for (var i = 0; i < q; ++i) { ans[i] = Calc(p, max, count, cum, query[i][1]) - Calc(p, max, count, cum, query[i][0] - 1); } return ans; } static long Calc(int p, int[] max, int[] count, long[] cum, int e) { if (e == 0) return 0; if (e >= p) return cum[^1] + (long)p * (e - p); var ok = 0; var ng = max.Length; while (ng - ok > 1) { var mid = (ok + ng) / 2; if (max[mid] <= e) ok = mid; else ng = mid; } if (max[ok] == e) return cum[ok]; var d = p / max[ok + 1]; var l = e - max[ok]; var f = p % max[ok + 1] + (long)(count[ok + 1] - l) * d; return f * l + (long)d * l * (l - 1) / 2 + cum[ok]; } }