#include <bits/stdc++.h>
using namespace std;
int n, m, in, ramase;
int a[1000005], arb[4000005], val[1000005];
void update(int nod, int st, int dr, int poz, int val) {
  if (st == dr) {
    arb[nod] = val;
    return;
  }
  int mij = (st + dr) >> 1;
  int nodst = nod << 1;
  int noddr = nodst | 1;
  if (poz <= mij) {
    update(nodst, st, mij, poz, val);
  } else {
    update(noddr, mij + 1, dr, poz, val);
  }
  arb[nod] = arb[nodst] + arb[noddr];
}
int query(int nod, int st, int dr, int k) {
  if (st == dr) {
    return st;
  }
  int mij = (st + dr) >> 1;
  int nodst = nod << 1;
  int noddr = nodst | 1;
  if (arb[nodst] >= k) {
    return query(nodst, st, mij, k);
  } else {
    return query(noddr, mij + 1, dr, k - arb[nodst]);
  }
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= m; ++i) {
    scanf("%d", &a[i]);
  }
  while (n--) {
    int tip;
    scanf("%d", &tip);
    if (tip >= 0) {
      ++in;
      ++ramase;
      val[in] = tip;
      update(1, 1, 1000000, in, 1);
    } else {
      int p = 0;
      while (p < m && a[p + 1] <= ramase) {
        ++p;
      }
      for (int i = p; i >= 1; --i) {
        int poz = query(1, 1, 1000000, a[i]);
        update(1, 1, 1000000, poz, 0);
        --ramase;
      }
    }
  }
  if (ramase > 0) {
    for (int i = 1; i <= ramase; ++i) {
      int poz = query(1, 1, 1000000, i);
      printf("%d", val[poz]);
    }
  } else {
    printf("Poor stack!\n");
  }
  return 0;
}
