#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 7;
int a[N];
int tree[N << 2];
void upd(int l, int r, int node, int pos, int val) {
  if (l == r) {
    tree[node] = val;
    return;
  }
  int mid = (l + r) >> 1;
  if (pos <= mid)
    upd(l, mid, node << 1, pos, val);
  else
    upd(mid + 1, r, node << 1 | 1, pos, val);
  tree[node] = tree[node << 1] + tree[node << 1 | 1];
}
int qry(int l, int r, int node, int rk) {
  if (l == r) return l;
  int mid = (l + r) >> 1;
  if (rk <= tree[node << 1])
    return qry(l, mid, node << 1, rk);
  else
    return qry(mid + 1, r, node << 1 | 1, rk - tree[node << 1]);
}
int Qry(int l, int r, int node, int pos) {
  if (l == r) return tree[node];
  int mid = (l + r) >> 1;
  if (pos <= mid)
    return Qry(l, mid, node << 1, pos);
  else
    return Qry(mid + 1, r, node << 1 | 1, pos);
}
int main() {
  std::ios::sync_with_stdio(0);
  std::cin.tie(0);
  int n, m;
  cin >> n >> m;
  for (int i = (1); i < (m + 1); ++i) cin >> a[i];
  a[m + 1] = n + 1;
  vector<int> v;
  int p = 0, sz = 0;
  for (int cas = (0); cas < (n); ++cas) {
    int b;
    cin >> b;
    if (b == -1) {
      vector<int> era;
      for (int i = (1); i < (p + 1); ++i) era.push_back(qry(1, n, 1, a[i]));
      for (int i = (0); i < ((int)era.size()); ++i) upd(1, n, 1, era[i], 0);
      sz -= (int)era.size();
      while (sz < a[p]) p--;
    } else {
      v.push_back(b);
      sz++;
      upd(1, n, 1, (int)v.size(), 1);
      while (sz >= a[p + 1]) p++;
    }
  }
  if (!sz)
    cout << "Poor stack!"
         << "\n";
  else
    for (int i = (0); i < ((int)v.size()); ++i)
      if (Qry(1, n, 1, i + 1)) cout << v[i];
  return 0;
}
