#include <bits/stdc++.h>
using namespace std;
long long int n;
long long int m;
vector<long long int> v;
vector<long long int> vv;
vector<long long int> rest;
long long int solve(long long int pat) {
  rest = v;
  vv.clear();
  long long int cur = 0;
  for (int i = 1; i <= n; i++) {
    long long int star = i;
    long long int goal = i + (pat - 1LL) * n;
    long long int sm = (star + goal) * pat / 2LL;
    rest[i - 1] -= sm;
    if (rest[i - 1] < 0LL) return 0;
    cur += sm;
  }
  for (int j = n - 2; j >= 0; j--) {
    rest[j] = min(rest[j], rest[j + 1]);
  }
  if (m - n * pat == 0) {
    return cur;
  }
  long long int ava = m - n * pat;
  long long int total = min(pat * ava, rest[0]);
  cur += total * n;
  if ((total + ava - 1) / ava == pat) {
    ava = (ava - (total % ava)) % ava;
  }
  for (int j = 1; j < n; j++) {
    rest[j] -= total;
    long long int mv = min(rest[j], ava);
    ava -= mv;
    cur += mv * (n - j);
    total += mv;
  }
  return cur;
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    long long int a;
    scanf("%lld", &a);
    v.push_back(a);
  }
  long long int ans = 0;
  long long int mint = 1;
  long long int maxt = m / n;
  while (mint + 2LL < maxt) {
    long long int mid1 = mint + (maxt - mint) / 3LL;
    long long int mid2 = mid1 + (maxt - mint) / 3LL;
    long long int f1 = solve(mid1);
    long long int f2 = solve(mid2);
    ans = max(ans, f1);
    ans = max(ans, f2);
    if (f1 == -1) {
      maxt = mid1 - 1;
      continue;
    }
    if (f2 == -1) {
      maxt = mid2 - 1;
      continue;
    }
    if (f1 >= f2) {
      maxt = mid2 - 1;
    } else {
      mint = mid1 + 1;
    }
  }
  for (long long int c = mint; c <= maxt; c++) {
    ans = max(ans, solve(c));
  }
  printf("%lld\n", ans);
  return 0;
}
