#include "iostream"
#include "vector"
#include "queue"
#include "array"
#include "algorithm"

using ll = long long;

const int mod = 119 << 23 | 1;

int add(int a, int b){
    return a + b - mod * (a + b >= mod);
}

int mul(int a, int b){
    return (int)((ll)a * b % mod);
}

int bin_pow(int a, int b){
    int res = 1;
    while(b > 0){
        if(b & 1){
            res = mul(res, a);
        }
        a = mul(a, a);
        b >>= 1;
    }
    return res;
}

signed main() {
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);
    int n, q;
    std::cin >> n >> q;
    std::vector<int> a(n), b(q);
    for (auto &i : a) {
        std::cin >> i;
        --i;
    }
    for (auto &i : b) {
        std::cin >> i;
    }
    std::vector<int> ans(2);
    if (b[0] == 1) {
        for(int i = 0; i < n; ++i){
            ans[0] = add(ans[0], bin_pow(a[i] + 1, i + 1));
            ans[1] = add(ans[1], bin_pow(a[n - 1 - i] + 1, i + 1));
        }
        for(int i = 1; i <= q; ++i){
            std::cout << ans[i % 2] << ' ';
        }
        std::cout << '\n';
        return 0;
    }
    if (b[0] == 2) {
        for(int i = 0; i < n; ++i){
            ans[0] = add(ans[0], bin_pow(a[i] + 1, i + 1));
            ans[1] = add(ans[1], bin_pow(n - a[i], i + 1));
        }
        for(int i = 1; i <= q; ++i){
            std::cout << ans[i % 2] << ' ';
        }
        std::cout << '\n';
        return 0;
    }
    std::vector<int> p(n);
    for(int i = 0; i < n; ++i){
        p[a[i]] = i;
    }
    for(int i =0; i < n; ++i){
        ans[0] = add(ans[0], bin_pow(a[i] + 1, i + 1));
        ans[1] = add(ans[1], bin_pow(p[i] + 1, i + 1));
    }
    for(int i = 1; i <= q; ++i){
        std::cout << ans[i % 2] << ' ';
    }
    std::cout << '\n';
    return 0;
}