#include <bits/stdc++.h>
using namespace std;
int dig[20];
long long dp[20][2520][50];
int all[2521];
int gcd(int x, int y) {
  if (x > y) {
    swap(x, y);
  }
  return x == 0 ? y : gcd(y % x, x);
}
void init() {
  int tot = 0;
  for (int i = 1; i <= 2520; ++i) {
    if (2520 % i == 0) {
      all[i] = tot++;
    }
  }
}
long long dfs(int len, int pre1, int pre2, int flag) {
  if (len < 0) {
    return pre1 % pre2 == 0;
  }
  if (!flag && dp[len][pre1][all[pre2]] != -1) {
    return dp[len][pre1][all[pre2]];
  }
  int end = flag ? dig[len] : 9;
  long long ans = 0;
  for (int i = 0; i <= end; ++i) {
    ans += dfs(len - 1, (pre1 * 10 + i) % 2520,
               i == 0 ? pre2 : pre2 * i / gcd(pre2, i), flag && i == end);
  }
  if (!flag) {
    dp[len][pre1][all[pre2]] = ans;
  }
  return ans;
}
long long solve(long long x) {
  int cnt = 0;
  while (x) {
    dig[cnt++] = x % 10;
    x = x / 10;
  }
  return dfs(cnt - 1, 0, 1, 1);
}
int main() {
  int T;
  scanf("%d", &T);
  init();
  memset(dp, -1, sizeof(dp));
  while (T--) {
    long long l, r;
    scanf("%I64d%I64d", &l, &r);
    printf("%I64d\n", solve(r) - solve(l - 1));
  }
  return 0;
}
