#include <bits/stdc++.h>
using namespace std;

const int MAXN = 900010; // 数位和最大值附近
bitset<MAXN> isPrime;    // 标记质数

// 预处理质数
void sieve() {
    isPrime.set();          // 全部初始化为 1
    isPrime[0] = isPrime[1] = 0; // 0 和 1 不是质数
    for (long long i = 2; i < MAXN; i++) {
        if (isPrime[i]) {
            for (long long j = i * i; j < MAXN; j += i) {
                isPrime[j] = 0; // 标记非质数
            }
        }
    }
}

// 计算数位和
int digitSum(const string& s) {
    int sum = 0;
    for (char c : s) {
        sum += c - '0';
    }
    return sum;
}

// 将字符串表示的数加1
string increment(string s) {
    int n = s.size();
    string res = s;
    bool carry = true;
    for (int i = n - 1; i >= 0 && carry; i--) {
        int digit = res[i] - '0' + 1;
        res[i] = (digit % 10) + '0';
        carry = digit >= 10;
    }
    if (carry) res = '1' + res;
    return res;
}

// 寻找满足条件的数
string findNumber(const string& x) {
    // 计算 2x
    string doubleX = x;
    int carry = 0;
    for (int i = doubleX.size() - 1; i >= 0; i--) {
        int digit = (doubleX[i] - '0') * 2 + carry;
        doubleX[i] = (digit % 10) + '0';
        carry = digit / 10;
    }
    if (carry) doubleX = '1' + doubleX;

    // 从 x+1 开始检查
    string curr = increment(x);
    while (curr.size() < doubleX.size() || (curr.size() == doubleX.size() && curr <= doubleX)) {
        if (isPrime[digitSum(curr)]) {
            return curr;
        }
        curr = increment(curr);
    }

    // 如果 [x+1, 2x] 内没有找到,检查 x 本身
    if (isPrime[digitSum(x)]) {
        return x;
    }
    return "-1";
}

int main() {
    sieve(); // 预处理质数
    int T;
    cin >> T;
    for (int t = 0; t < T; t++) {
        string x;
        cin >> x;
        string result = findNumber(x);
        cout << result << endl;
    }
    return 0;
}