#include <bits/stdc++.h>
using namespace std;
int const dx[] = {1, -1, 0, 0, 1, 1, -1, -1};
int const dy[] = {0, 0, 1, -1, 1, -1, 1, -1};
int64_t const LIM = 1e6, INF = 1e9, MOD = 1e9 + 7;
double const PI = 3.141592653589793, EPS = 1e-7;
struct treap_t {
  int prior, size, val;
  treap_t *l, *r;
  treap_t(int val = 0) : prior(rand()), size(1), val(val), l(0), r(0) {}
};
typedef treap_t *tree_t;
int get_size(tree_t t) { return t ? t->size : 0; }
void upd_size(tree_t t) {
  if (t) t->size = 1 + get_size(t->l) + get_size(t->r);
}
tree_t merge(tree_t l, tree_t r) {
  if (!l || !r) {
    return l ? l : r;
  }
  if (l->prior > r->prior) {
    l->r = merge(l->r, r);
    upd_size(l);
    return l;
  } else {
    r->l = merge(l, r->l);
    upd_size(r);
    return r;
  }
}
void split(tree_t t, int sz, tree_t &l, tree_t &r, int prev) {
  if (!t) return void(l = r = 0);
  int x = get_size(t->l) + prev;
  if (x < sz) {
    split(t->r, sz, t->r, r, x + 1);
    l = t;
  } else {
    split(t->l, sz, l, t->l, prev);
    r = t;
  }
  upd_size(t);
}
tree_t root = 0;
int a[LIM], n, m;
void print_ans(tree_t t) {
  if (t) {
    print_ans(t->l);
    cout << t->val;
    print_ans(t->r);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> m >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    a[i]--;
  }
  for (int j = 0; j < m; j++) {
    int x;
    cin >> x;
    if (x == 1 || x == 0) {
      root = merge(root, new treap_t(x));
    } else {
      int i = 0;
      for (; i < n && a[i] < get_size(root); i++)
        ;
      for (i = i - 1; i >= 0; i--) {
        tree_t l, m, r;
        split(root, a[i], l, m, 0);
        split(m, 1, m, r, 0);
        root = merge(l, r);
      }
    }
  }
  if (get_size(root) == 0) {
    cout << "Poor stack!" << '\n';
    return 0;
  }
  print_ans(root);
  cout << '\n';
  return 0;
}
