#include<bits/stdc++.h>
using namespace std;
int n;long long x,p,m1,c,m2,m2_1,m3,m3_1;
int main(){
cin >> n >> p >> x;
c = m1 = m3_1 = x,m2_1 = x * 2;
for(int i = 2;i <= n;i++){
cin >> x;
c = max(0LL,c) + x;
m1 = max(m1,c);
if(m2 > m3 || (m2 == m3 && m2_1 > m3_1)) m3 = m2,m3_1 = m2_1;
if(m1){
m2_1 += m1;
if((m2_1?m2_1:-m2_1) >= 1e18){
m2 += m2_1 / 1e18;
m2_1 %= (long long)1e18;
}
}
}
cout << (((m3 % p) * ((long long)1e18 % p)) % p + m3_1 % p) % p;
return 0;
}
会越界的用了两个来存储,c为当前最大子段和;m1是全局的,即当前小朋友特征值;m2/m2_1为下一个小朋友的分数;m3/m3_1为答案