#include <bits/stdc++.h>
using namespace std;
long long nwd(long long a, long long b) { return !b ? a : nwd(b, a % b); }
bool used[1007];
struct cmp {
  bool operator()(const pair<int, int> &P1, const pair<int, int> &P2) const {
    if (P1.first > P2.first) return true;
    if (P1.first < P2.first) return false;
    if (used[P1.second] > used[P2.second]) return true;
    if (used[P1.second] < used[P2.second]) return false;
    return P1.second < P2.second;
    return false;
  }
};
int main() {
  int n, k;
  scanf("%d %d", &n, &k);
  int A[1007];
  for (int i = 0; i < (k); i++) scanf("%d", &A[i]);
  set<pair<int, int>, cmp> S;
  for (int i = 0; i < (k); i++) S.insert(make_pair(A[i], i + 1));
  vector<int> ans;
  for (int i = 0; i < n; i++) {
    if (S.empty()) break;
    if (ans.size() == 0 ||
        (ans.size() > 0 && ans[ans.size() - 1] != (*(S.begin())).second)) {
      if ((*S.begin()).first <= 0) break;
      ans.push_back((*S.begin()).second);
      pair<int, int> P = *S.begin();
      used[P.second] = 1;
      S.erase(S.begin());
      P.first--;
      if (P.first > 0) S.insert(P);
    } else {
      set<pair<int, int>, cmp>::iterator it = S.begin();
      it++;
      if (it == S.end()) break;
      if ((*it).first <= 0) break;
      ans.push_back((*it).second);
      pair<int, int> P = *it;
      used[P.second] = 1;
      S.erase(it);
      P.first--;
      if (P.first > 0) S.insert(P);
    }
  }
  if (ans[ans.size() - 1] == ans[0])
    while (!S.empty()) {
      if ((*S.begin()).second != ans[ans.size() - 2] &&
          ((*S.begin()).second != ans[0]) && (*S.begin()).first != 0)
        ans[ans.size() - 1] = (*S.begin()).second;
      S.erase(S.begin());
    }
  if (ans[ans.size() - 1] == ans[0]) ans.pop_back();
  if (ans.size() != n) {
    printf("-1");
    return 0;
  }
  for (int i = 0; i < (ans.size()); i++) printf("%d ", ans[i]);
  return 0;
}
