#include <bits/stdc++.h>
using namespace std;
long maxSubarraySum(const vector<int>& arr) {
long maxSum = arr[0], currentSum = arr[0];
for (size_t i = 1; i < arr.size(); ++i) {
currentSum = max((long)arr[i], currentSum + arr[i]);
maxSum = max(maxSum, currentSum);
}
return maxSum;
}
long calculateMaxQualityScore(int impactFactor, vector<int> ratings) {
int n = ratings.size();
// Step 1: Get original quality score
long originalScore = maxSubarraySum(ratings);
// Step 2: Strategy 1 - Amplify Ratings
vector<int> deltaAmplify(n);
for (int i = 0; i < n; ++i)
deltaAmplify[i] = ratings[i] * impactFactor - ratings[i];
long maxDeltaAmplify = deltaAmplify[0], curr = deltaAmplify[0];
for (int i = 1; i < n; ++i) {
curr = max((long)deltaAmplify[i], curr + deltaAmplify[i]);
maxDeltaAmplify = max(maxDeltaAmplify, curr);
}
// Step 3: Strategy 2 - Adjust Ratings
vector<int> deltaAdjust(n);
for (int i = 0; i < n; ++i) {
int adjusted;
if (ratings[i] >= 0)
adjusted = floor((double)ratings[i] / impactFactor);
else
adjusted = ceil((double)ratings[i] / impactFactor);
deltaAdjust[i] = adjusted - ratings[i];
}
long maxDeltaAdjust = deltaAdjust[0]; curr = deltaAdjust[0];
for (int i = 1; i < n; ++i) {
curr = max((long)deltaAdjust[i], curr + deltaAdjust[i]);
maxDeltaAdjust = max(maxDeltaAdjust, curr);
}
return max({originalScore, originalScore + maxDeltaAmplify, originalScore + maxDeltaAdjust});
}
int main() {
int impactFactor, n;
cin >> impactFactor >> n;
vector<int> ratings(n);
for (int i = 0; i < n; ++i) {
cin >> ratings[i];
}
long result = calculateMaxQualityScore(impactFactor, ratings);
cout << result << endl;
return 0;
}