#include <bits/stdc++.h>
using namespace std;
const int INF = (int)2e9;
const long long INFL = (long long)9e18;
const int MAXINT = ((~0) ^ (1 << 31));
const long long MAXLL = ((~0) ^ ((long long)1 << 63));
template <class T>
inline T pow2(T a) {
  return a * a;
}
template <class T>
inline bool mineq(T& a, T b) {
  return (a > b) ? (a = b, true) : false;
}
template <class T>
inline bool maxeq(T& a, T b) {
  return (a < b) ? (a = b, true) : false;
}
const int maxn = (int)2e5 + 10;
;
long long n, m;
long long c[maxn], w[maxn];
long long ans = 0;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for (int i = 0; i < (int)(n); i++) cin >> c[i];
  for (long long k = 1; k <= m / n; k++) {
    w[n - 1] = min(c[n - 1], m * k - n * k * (k - 1) / 2);
    for (int i = n - 2; i >= (int)(0); i--) w[i] = min(c[i], w[i + 1] - k);
    if (w[0] <= 0) continue;
    long long x = w[0] - (k - 1) * (m + 1) + k * (k - 1) / 2 * n;
    if (x <= 0) x = 1;
    long long whitespace = m - (x - 1) - k * n;
    long long now = w[0] * n;
    long long nowcost = w[0];
    for (int i = 1; i < (int)(n); i++) {
      long long mn = min(whitespace, w[i] - nowcost - k);
      now += (k + mn) * (n - i);
      whitespace -= mn;
      nowcost += mn + k;
    }
    maxeq(ans, now);
  }
  cout << ans;
}
