#include <bits/stdc++.h>
using namespace std;
long long n, k;
long long a[100010];
struct node {
  long long id, x, y, step;
  bool operator<(const node& f) const { return x - y < f.x - f.y; }
};
long long ans = 0;
priority_queue<node> q;
void run(int T) {
  cin >> n >> k;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    ans += a[i] * a[i];
    q.push((node){i, a[i] * a[i],
                  (a[i] / 2) * (a[i] / 2) * (2 - a[i] % 2) +
                      (a[i] / 2 + 1) * (a[i] / 2 + 1) * (a[i] % 2),
                  1});
  }
  for (int i = 1; i <= k - n; i++) {
    node top = q.top();
    q.pop();
    ans += top.y - top.x;
    long long j = top.step + 2;
    long long tmp = (a[top.id] / j) * (a[top.id] / j) * (j - a[top.id] % j) +
                    (a[top.id] / j + 1) * (a[top.id] / j + 1) * (a[top.id] % j);
    q.push((node){top.id, top.y, tmp, j - 1});
  }
  cout << ans << endl;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cout << fixed << setprecision(20);
  int T = 1;
  for (int i = 1; i <= T; i++) run(i);
}
