#include <bits/stdc++.h>
using namespace std;
inline int in() {
  int32_t x;
  scanf("%d", &x);
  return x;
}
inline string get() {
  char ch[1000010];
  scanf("%s", ch);
  return ch;
}
const int MAX_LG = 21;
const long long maxn = 1e6 + 10;
const long long base = 29;
const long long mod = 1e9 + 7;
const long long INF = 1e9;
const long long maxq = 2e5 + 10;
long long a[maxn];
long long b[maxn];
long long stree[4 * maxn];
long long sz[4 * maxn];
long long cur;
inline void update(long long p, long long l, long long r, long long x) {
  if (l > x || r < x) return;
  if (l == r) {
    stree[p] = b[l];
    sz[p] = 1;
    return;
  }
  long long mid = (l + r) >> 1;
  update(2 * p + 1, l, mid, x);
  update(2 * p + 2, mid + 1, r, x);
  sz[p] = sz[2 * p + 1] + sz[2 * p + 2];
}
inline void update2(long long p, long long l, long long r, long long id) {
  if (sz[p] < id) return;
  if (l == r) {
    stree[p] = -1;
    sz[p] = 0;
    return;
  }
  long long mid = (l + r) >> 1;
  if (sz[2 * p + 1] >= id)
    update2(2 * p + 1, l, mid, id);
  else
    update2(2 * p + 2, mid + 1, r, id - sz[2 * p + 1]);
  sz[p] = sz[2 * p + 1] + sz[2 * p + 2];
}
inline long long get(long long p, long long l, long long r, long long id) {
  if (l == r) return stree[p];
  long long mid = (l + r) >> 1;
  if (id <= mid) return get(2 * p + 1, l, mid, id);
  return get(2 * p + 2, mid + 1, r, id);
}
int32_t main() {
  long long q = in(), n = in();
  for (long long i = 0; i < n; i++) a[i] = in();
  while (q--) {
    long long tp = in();
    if (tp + 1) {
      b[cur++] = tp;
      update(0, 0, maxn - 1, cur - 1);
    } else {
      long long pt = 0;
      while (pt < n && a[pt] <= sz[0]) pt++;
      while (pt) {
        long long where = a[--pt];
        update2(0, 0, maxn - 1, where);
      }
    }
  }
  bool fl = false;
  for (long long i = 0; i < cur; i++) {
    long long gt = get(0, 0, maxn - 1, i);
    if (gt != -1) {
      cout << gt;
      fl = true;
    }
  }
  if (fl) return 0;
  cout << "Poor stack!\n";
  return 0;
}
