#include <bits/stdc++.h>
using namespace std;
template <class T>
void show(T a, int n) {
  for (int i = 0; i < n; ++i) cout << a[i] << ' ';
  cout << endl;
}
template <class T>
void show(T a, int r, int l) {
  for (int i = 0; i < r; ++i) show(a[i], l);
  cout << endl;
}
const int N = 1024;
const int M = 512;
const int oo = 10000 * 10000 * 10;
int n, m;
vector<int> ans;
int rid;
struct pii {
  int first;
  int second;
};
pii mp(int a, int b) {
  pii u;
  u.first = a;
  u.second = b;
  return u;
}
bool operator<(pii a, pii b) {
  if (a.first != b.first) return a.first < b.first;
  if (a.second != rid && b.second == rid) return true;
  return false;
}
int val[N];
priority_queue<pii> pq;
bool solve() {
  int i, j, k;
  rid = 1;
  for (i = 1; i < m; ++i)
    if (val[i] > val[rid - 1]) rid = i + 1;
  for (i = 0; i < m; ++i) pq.push(mp(val[i], i + 1));
  pii now = pq.top();
  pq.pop();
  ans.push_back(now.second);
  now.first -= 1;
  rid = now.second;
  for (i = 0; i < n - 2; ++i) {
    if (pq.empty()) return false;
    pii u = pq.top();
    pq.pop();
    if (now.first) pq.push(now);
    now = u;
    ans.push_back(now.second);
    now.first -= 1;
  }
  while (!pq.empty() && pq.top().second == rid) pq.pop();
  if (pq.empty()) return false;
  ans.push_back(pq.top().second);
  return true;
}
int main() {
  int i, j, cas = 0;
  scanf("%d %d", &n, &m);
  for (i = 0; i < m; ++i) {
    scanf("%d", &val[i]);
  }
  if (solve()) {
    for (i = 0; i < n; ++i) {
      if (i) putchar(' ');
      printf("%d", ans[i]);
    }
    putchar(10);
  } else
    puts("-1");
  return 0;
}
