#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 5;
int tree[4 * MAXN], n, m, a[MAXN], size = 0, less1[MAXN];
vector<int> del, nums;
void initialize(int l, int r, int node) {
  tree[node] = r - l + 1;
  if (r == l) return;
  int mid = (l + r) / 2;
  initialize(l, mid, 2 * node);
  initialize(mid + 1, r, 2 * node + 1);
}
int elim(int node) {
  while (node >= 1) {
    tree[node]--;
    node /= 2;
  }
}
void find(int l, int r, int sum, int node) {
  if (l == r) {
    nums[l] = -2;
    elim(node);
    return;
  }
  int mid = (l + r) / 2;
  if (tree[2 * node] >= sum)
    find(l, mid, sum, 2 * node);
  else
    find(mid + 1, r, sum - tree[2 * node], 2 * node + 1);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> m;
  for (int i = 0; i < m; ++i) {
    cin >> a[i];
  }
  for (int i = 0; i < MAXN; ++i) less1[i] = 0;
  for (int i = 0; i < m - 1; ++i)
    for (int k = a[i]; k < a[i + 1]; ++k) less1[k] = i + 1;
  for (int i = a[m - 1]; i < MAXN; ++i) less1[i] = m;
  for (int i = 0; i < n; ++i) {
    int x;
    cin >> x;
    if (x == -1) {
      del.push_back(less1[size]);
      size -= less1[size];
    } else {
      nums.push_back(x);
      size++;
    }
  }
  if (nums.size() == 0) {
    cout << "Poor stack!" << endl;
    return 0;
  }
  initialize(0, nums.size() - 1, 1);
  for (int i = 0; i < del.size(); ++i)
    for (int j = del[i] - 1; j >= 0; --j) find(0, nums.size() - 1, a[j], 1);
  int ct = 0;
  for (int i = 0; i < nums.size(); ++i) {
    if (nums[i] != -2) {
      cout << nums[i];
      ++ct;
    }
  }
  if (ct == 0) cout << "Poor stack!";
  cout << endl;
}
