#include<bits/stdc++.h>usingnamespace std;constint maxn =1e6+10;#defineinf0x3f3f3f3fint a[maxn], pre[maxn], f[maxn];//pre存上一轮j-1个的最大值,f存本轮j-1的值intmain(){
ios::sync_with_stdio(false); cin.tie(); cout.tie(0);int n, m;while(cin>>n>>m){for(int i =1; i <= m; i++) cin >> a[i];int ans =-inf;for(int i =1; i <= n; i++){
ans =-inf;for(int j = i; j <= m; j++){
f[j]=max(pre[j -1], f[j -1])+ a[j];//等于上一轮j-1最大值和本轮j-1二者的max+第j个
pre[j -1]= ans;//上面的pre[j-1]是上一轮的,这是在更新本轮的
ans =max(ans, f[j]);//更新ans为每一轮的最大值}}for(int i =1; i <= m; i++) f[i]= pre[i]=0;
cout << ans << endl;//为什么ans是答案呢?题目要求的是n个区间,只有最后一轮才满足了n个区间的划分,而ans是最后一轮的最大值。}return0;}