Q = int(input()) sieve = [i for i in range(10**5+1)] p = 2 while p*p <= 10**5: if sieve[p] == p: for q in range(2*p,10**5+1,p): if sieve[q] == q: sieve[q] = p p += 1 from collections import defaultdict def cmb(n, r, p):#nCr mod p if (r < 0) or (n < r): return 0 r = min(r, n - r) return fact[n] * factinv[r] * factinv[n-r] % p p = 998244353 binomial_max = 10 ** 5 + 1 # N は必要分だけ用意する fact = [1, 1] factinv = [1, 1] inv = [0, 1] for i in range(2, binomial_max + 1): fact.append((fact[-1] * i) % p) inv.append((-inv[p % i] * (p // i)) % p) factinv.append((factinv[-1] * inv[-1]) % p) cnt = 0 for i in range(Q): A,B = map(int, input().split()) tmp = A while tmp>1: cnt += 1 tmp //= sieve[tmp] if cnt-1 < B-1: print(0) else: print(cmb(cnt-1,B-1,p))