#include<bits/stdc++.h>
#define int long long
using namespace std;
using db=double;
using vi=vector<int>;
using pii=pair<int,int>;
using ull=unsigned long long;
using pq=priority_queue<int>;
using pqn=priority_queue<int,vector<int>,greater<int> >;
#define ft first
#define sd second
#define gc getchar
#define pb push_back
#define emp emplace_back
#define mp make_pair
#define lowbit(n) ((n)&-(n))
#define ls (p*2)
#define rs (p*2+1)
#define sz(a) a.size()
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define ROF(i,a,b) for(int i=a;i>=b;i--)
const int N=1e6+7;
const int INF=4557430888798830399ll;
const int inf=INT_MAX;
const int K=233;
const int mod=998244353;
void read(int &x)
{
char ch=getchar();
int r=0,w=1;
while(!isdigit(ch))w=ch=='-'?-1:1,ch=getchar();
while(isdigit(ch))r=(r<<3)+(r<<1)+(ch^48),ch=getchar();
x=r*w;
}
void write(int x) {
char ch[20];
int len = 0;
if (x < 0)putchar('-'), x = -x;
while (x) {
ch[len++] = (x % 10) ^ 48;
x /= 10;
}
if(len==0)printf("0");
while (len--)putchar(ch[len]);
putchar('\n');
}
int sum[N],sumq[N],a[N];
signed main()
{
int n,m,ans=0,now;
read(n),read(m);now=n;
FOR(i,1,n)
{
read(a[i]);
sum[i]=sum[i-1]+a[i]%mod;sum[i]%=mod;
sumq[i]=sumq[i-1]+a[i]*a[i]%mod;sumq[i]%=mod;
}
FOR(i,1,m)
{
while(now>=1&&abs(a[now]+i)>abs(a[now]+1))now--;
ans+=((sumq[n]-sumq[now])%mod+mod)%mod+i*i%mod*(n-now)%mod+(((sum[n]-sum[now])%mod+mod)*2ll%mod*i%mod+mod)%mod,ans%=mod;
ans+=sumq[now]%mod+sum[now]*2%mod+now%mod,ans%=mod;
}
write(ans);
return 0;
}