#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
int *arr=new int[n];
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
int *dp=new int[n];
int max_1=0;
int max_2=0;
int index=-1;
for(int i=0;i<k;i++)
{
if(arr[i]>max_1)
{
max_2=max_1;
max_1=arr[i];
index=i;
}
else if(arr[i]>max_2)
{
max_2=arr[i];
}
dp[i]=arr[i];
}
if(max_1<0)
{
max_1=0;
}
if(max_2<0)
{
max_2=0;
}
int s=k;
int e=n;
int start_index;
int end=k;
while(s<e)
{
start_index=end;
end=end+k;
for(int z=(start_index);z<end;z++)
{
if((abs(z-index)!=k) && (arr[z]>=0))
{
arr[z]+=max_1;
}
else if((abs(z-index)==k) && (arr[z]>=0))
{
arr[z]+=max_2;
}
else if(arr[z]<0 && (abs(z-index)!=k))
{
arr[z]=max_1;
}
else
arr[z]=max_1;
}
int temp_max_1=arr[start_index];
int temp_max_2=arr[start_index];
int temp_index=start_index;
for(int l=(start_index+1);l<end;l++)
{
if(arr[l]>=temp_max_1)
{
temp_max_2=temp_max_1;
temp_max_1=arr[l];
temp_index=l;
}
}
if(temp_max_1>0)
{
max_1=temp_max_1;
index=temp_index;
}
if(temp_max_2)
max_2=temp_max_2;
s=end;
}
int o=n/k;
int p_start=o*k;
int maxo=arr[p_start];
for(;p_start<n;p_start++)
{
if(arr[p_start]>maxo)
{
maxo=arr[p_start];
}
}
cout<<maxo;
return 0;
}