import sys from collections import deque MI=lambda:map(int,sys.stdin.readline().split()) n,K=MI() A=list(MI()) # 窗口数 M=n-K+1 # dp[i] = 覆盖前 i 个窗口(0..i-1)的最小跳过代价 dp=[0]*(M+1) # B[j] = 在位置 j 跳过的总代价候选 = dp[ max(0, j-K+1) ] + A[j] B=[0]*n dq=deque() # 初始化窗0 时的候选 j∈[0..K-1] for j in range(K): B[j]=A[j] while dq and B[dq[-1]]>=B[j]: dq.pop() dq.append(j) # 依次算 dp[1]..dp[M] for w in range(M): # 用当前窗口 [w..w+K-1] 内最小的 B 作为 dp[w+1] dp[w+1]=B[dq[0]] # 滑出左端点 j=w if dq[0]==w: dq.popleft() # 加入新点 j=w+K nj=w+K if nj=B[nj]: dq.pop() dq.append(nj) # 总美味 - 最小跳过代价 print(sum(A)-dp[M])