代码:

#include<bits/stdc++.h>
#define MOD 998244353
using namespace std;
#define MAXN 2050

int dp[MAXN][2] , sum[MAXN][2] , a[MAXN] , b[MAXN];
int test , n , m ;
long long int ans=0;
int main()
{
    scanf("%d",&test);
    while(test--)
    {
        scanf("%d%d",&n,&m);
        ans=0;
        for(int i=0;i<n;i++)scanf("%d",&a[i]);
        for(int i=0;i<m;i++)scanf("%d",&b[i]);
        memset(sum,0,sizeof(sum));
        for(int i=0;i<n;i++)//枚举每一个a[i]
        {
            /*int xcx0=1,xcx1=0;//xcx0表示的是当前作为波谷的可能数,xcx1表示的是当前作为波峰的可能数。 for(int j=0;j<m;j++)//找出一个可能和a[i]进行匹配的b[j] { if(a[i]==b[j]) { dp[j][1]=xcx0; dp[j][0]=xcx1; } xcx0+=sum[j][0]; xcx1+=sum[j][1]; }*/
            memset(dp,0,sizeof(dp));
            long long int xcx0=0,xcx1=1;
            for(int j=0;j<m;j++)
            {
                dp[j][0]=dp[j][1]=0;
                if(a[i]==b[j])
                {
                    dp[j][0]=xcx1;
                    dp[j][1]=xcx0;
                    ans=ans+xcx0+xcx1;
                    ans%=MOD;
                }
                else if(a[i]>b[j]) xcx0=(xcx0+sum[j][0])%MOD;
                else xcx1=(xcx1+sum[j][1])%MOD;
            }
            for(int j=0;j<m;j++)
            {
                sum[j][0]=(sum[j][0]+dp[j][0])%MOD;
                sum[j][1]=(sum[j][1]+dp[j][1])%MOD;
            }

        }
        printf("%lld\n",ans);

    }
}