#include namespace { #pragma GCC diagnostic ignored "-Wunused-function" #include #pragma GCC diagnostic warning "-Wunused-function" using namespace std; using namespace atcoder; #define rep(i,n) for(int i = 0; i < (int)(n); i++) #define rrep(i,n) for(int i = (int)(n) - 1; i >= 0; i--) #define all(x) begin(x), end(x) #define rall(x) rbegin(x), rend(x) template bool chmax(T& a, const T& b) { if (a < b) { a = b; return true; } else return false; } template bool chmin(T& a, const T& b) { if (b < a) { a = b; return true; } else return false; } using ll = long long; using P = pair; using VI = vector; using VVI = vector; using VL = vector; using VVL = vector; ll p10[19]; int find_sol(ll a, int c, int m) { auto [g, x] = internal::inv_gcd(a, m); if (c % g) return -1; c /= g, m /= g; return c * x % m; } ll solve(string x, int m) { int n = x.size(); rep(i, n) x[i] -= '0'; for (int l = n; l <= 18; l++) { int d[18]; rep(i, 18) d[i] = -1; rep(i, n) d[i] = x[i]; int b = l - n; bool ok = true; rep(i, n) { if (d[b+i] != -1 && x[i] != d[b+i]) { ok = false; break; } d[b+i] = x[i]; } if (!ok) continue; if (b <= n) { ll val = 0; rrep(i, l) val = 10 * val + d[i]; if (val % m == 0) return val; continue; } ll c = 0; rrep(i, l) c = 10 * c + max(d[i], 0); ll cm = c % m; cm = (m - cm) % m; // 10^n t = cm (mod m) ll t = find_sol(p10[n], cm, m); if (t != -1 && t < p10[b - n]) { return c + p10[n] * t; } } return -1; } } int main() { ios::sync_with_stdio(false); cin.tie(0); p10[0] = 1; rep(i, 18) p10[i+1] = p10[i] * 10; int tt; cin >> tt; while (tt--) { string x; int m; cin >> x >> m; reverse(all(x)); cout << solve(x, m) << '\n'; } }