#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000500;
typedef struct treap *ptreap;
struct treap {
  int v, c, y;
  ptreap l, r;
  treap() {}
  treap(int v) : v(v), c(1), y(rand()), l(0), r(0) {}
};
int cnt(ptreap t) { return t ? t->c : 0; }
void recalc(ptreap t) {
  if (t) t->c = cnt(t->l) + cnt(t->r) + 1;
}
void split(ptreap t, int key, ptreap &l, ptreap &r) {
  if (!t) {
    l = r = 0;
    return;
  }
  int cur_key = cnt(t->l);
  if (key < cur_key) {
    split(t->l, key, l, t->l);
    r = t;
  } else {
    split(t->r, key - cur_key - 1, t->r, r);
    l = t;
  }
  recalc(t);
}
void merge(ptreap l, ptreap r, ptreap &t) {
  if (!l || !r) {
    t = l ? l : r;
    return;
  }
  if (l->y < r->y) {
    merge(l->r, r, l->r);
    t = l;
  } else {
    merge(l, r->l, r->l);
    t = r;
  }
  recalc(t);
}
void print(ptreap t) {
  if (!t) return;
  print(t->l);
  cout << t->v;
  print(t->r);
}
int n, m, val, r, cur, a[maxn];
ptreap t;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  srand(time(0));
  cin >> n >> m;
  for (int i = 0; i < m; ++i) {
    cin >> a[i];
    --a[i];
  }
  for (int i = 0; i < n; ++i) {
    cin >> val;
    if (val == -1) {
      for (int j = 0; j < r; ++j) {
        ptreap q, w;
        split(t, a[j] - j, q, t);
        split(q, a[j] - j - 1, w, q);
        merge(w, t, t);
      }
      cur -= r;
      while (r > 0 && a[r - 1] > cur - 1) --r;
    } else {
      ptreap tmp = new treap(val);
      merge(t, tmp, t);
      ++cur;
      if (a[r] == cur - 1) ++r;
    }
  }
  if (!cur)
    cout << "Poor stack!";
  else
    print(t);
  return 0;
}
