#include<stdio.h>
inline long long read(){
long long k=0,j=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')j=-1;c=getchar();}
while(c>='0'&&c<='9')k=k*10+c-'0',c=getchar();
return k*j;
}
long long max(long long a,long long b){return a>b?a:b;}
long long s[1000005],a[1000005];
int main(){
long long n=read(),q=read();
for(long long i=1;i<=n;i++)a[i]=read();
for(long long i=1;i<=n;i++){
s[i]=s[i-1]+a[i];
if(s[i]<0)s[i]=a[i];
}
s[0]=-2147483647;
for(long long i=1;i<=n;i++)s[i]=max(s[i],s[i-1]);
a[1]=s[1];long long jmx=a[1]+s[1],ans=a[1]%q;
for(long long i=2;i<=n;i++){
a[i]=jmx;ans=max(ans,a[i])%q;
jmx=max(jmx,(a[i]+s[i]));
}
printf("%lld",ans%q);
return 0;
}