#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void mini(T &a, T b) {
  if (b < a) a = b;
}
template <class T>
inline void maxi(T &a, T b) {
  if (b > a) a = b;
}
int bit[200005], n, m;
inline void update(int x) {
  for (; x <= n; x += x & (-x)) bit[x]++;
}
inline int get(int x) {
  int s = 0;
  for (; x; x -= x & (-x)) s += bit[x];
  return s;
}
int p[200005], r[200005];
int L[200005], R[200005];
int g[200005], ans[200005];
vector<int> E[200005];
vector<pair<int, int> > v[200005];
void add(int i, int j) {
  if (i == j) return;
  E[i].push_back(j);
  E[j].push_back(i);
}
int main() {
  cin >> n >> m;
  for (int i = 1; i < n + 1; i++) scanf("%d", p + i);
  for (int i = 1; i < n + 1; i++) r[p[i]] = i;
  for (int i = 1; i < m + 1; i++) {
    scanf("%d%d", L + i, R + i);
    v[R[i]].push_back(pair<int, int>(L[i], i));
  }
  for (int i = 1; i < n + 1; i++) {
    for (int j = 1; j * j <= i; j++)
      if (i % j == 0) {
        add(i, j);
        if (j * j != i) add(i, i / j);
      }
  }
  for (int i = 1; i < n + 1; i++) {
    for (typeof E[p[i]].begin() e = E[p[i]].begin(); e != E[p[i]].end(); e++) {
      int j = r[*e];
      if (j < i) update(j);
    }
    update(i);
    for (typeof v[i].begin() e = v[i].begin(); e != v[i].end(); e++) {
      int le = e->first, ind = e->second;
      ans[ind] = get(i) - get(le - 1);
    }
  }
  for (int i = 1; i < m + 1; i++) printf("%d\n", ans[i]);
}
