#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
void speed()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}
const int mod=998244353;
int n,q,a[200005],b[200005],pos[200005],c[200005];
long long int otg,sum1,sum2,sum3,ot[50];
long long int fast(long long int base,long long int step)
{
    long long int w=base;
    base=1;
    for(int i=0;i<30;i++)
    {
        if((1<<i)&step)
        {
            base=(base*w)%mod;
        }
        w=(w*w)%mod;
    }
    return base;
}
void dumb()
{
    for(int i=1;i<=q;i++)
    {
        otg=0;
        if(b[i]==1)
        {
            for(int i=1;i<=n/2;i++)
            {
                swap(pos[a[i]],pos[a[n-i+1]]);
                swap(a[i],a[n-i+1]);
            }
            for(int i=1;i<=n;i++)
            {
                otg=(otg+fast(a[i],i))%mod;
            }
        }
        if(b[i]==2)
        {
            for(int i=1;i<=n/2;i++)
            {
                swap(a[pos[i]],a[pos[n-i+1]]);
                swap(pos[i],pos[n-i+1]);
            }
            for(int i=1;i<=n;i++)
            {
                otg=(otg+fast(a[i],i))%mod;
            }
        }
        if(b[i]==3)
        {
            for(int i=1;i<=n;i++)
            {
                c[i]=pos[i];
            }
            for(int i=1;i<=n;i++)
            {
                pos[c[i]]=i;
                a[i]=c[i];
            }
            for(int i=1;i<=n;i++)
            {
                otg=(otg+fast(a[i],i))%mod;
            }
        }
        cout<<otg<<" ";
    }
    cout<<endl;
}
void resh2()
{
    long long int otg2=0;
    for(int i=1;i<=n;i++)
    {
        otg=(otg+fast(a[i],i))%mod;
    }
    for(int i=1;i<=n;i++)
    {
        c[i]=pos[i];
    }
    for(int i=1;i<=n;i++)
    {
        pos[c[i]]=i;
        a[i]=c[i];
    }
    for(int i=1;i<=n;i++)
    {
        otg2=(otg2+fast(a[i],i))%mod;
    }
    for(int i=1;i<=n;i++)
    {
        if(i%2==1)cout<<otg2<<" ";
        else cout<<otg<<" ";
    }
    cout<<endl;
}
void resh()
{
    for(int i=1;i<=n;i++)
    {
        ot[1]=(ot[1]+fast(a[i],i))%mod;
    }
    for(int i=1;i<=n/2;i++)
    {
        swap(pos[a[i]],pos[a[n-i+1]]);
        swap(a[i],a[n-i+1]);
    }
    for(int i=1;i<=n;i++)
    {
        ot[2]=(ot[2]+fast(a[i],i))%mod;
    }
    for(int i=1;i<=n/2;i++)
    {
        swap(a[pos[i]],a[pos[n-i+1]]);
        swap(pos[i],pos[n-i+1]);
    }
    for(int i=1;i<=n;i++)
    {
        ot[4]=(ot[4]+fast(a[i],i))%mod;
    }
    for(int i=1;i<=n/2;i++)
    {
        swap(pos[a[i]],pos[a[n-i+1]]);
        swap(a[i],a[n-i+1]);
    }
    for(int i=1;i<=n;i++)
    {
        ot[3]=(ot[3]+fast(a[i],i))%mod;
    }
    int br1=0,br2=0;
    for(int i=1;i<=q;i++)
    {
        if(b[i]==1)br1++;
        if(b[i]==2)br2++;
        if(br1%2==0&&br2%2==0)cout<<ot[1]<<" ";
        if(br1%2==1&&br2%2==0)cout<<ot[2]<<" ";
        if(br1%2==0&&br2%2==1)cout<<ot[3]<<" ";
        if(br1%2==1&&br2%2==1)cout<<ot[4]<<" ";
    }
    cout<<endl;
}
void read()
{
    cin>>n>>q;
    int num1=0,num2=0,num3=0;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        pos[a[i]]=i;
    }
    for(int i=1;i<=q;i++)
    {
        cin>>b[i];
        if(b[i]==1)num1++;
        if(b[i]==2)num2++;
        if(b[i]==3)num3++;
    }
    if(n<=0&&q<=1000)
    {
        dumb();
    }
    else if(num3==q)
    {
        resh2();
    }
    else
    {
        resh();
    }
}
int main()
{
    speed();
    read();
	return 0;
}
