#include <iostream>
#include <iomanip>
#include <algorithm>
#include <queue>
#include <stack>
#include <string>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <string.h>
#include <stdlib.h>
using namespace std;
// vector push_back push front top empty pop make_pair long long insert begin end
typedef long long ll;
typedef vector<int> vi;
typedef vector<pair <int,int> > vpi;
typedef vector<long long> vll;
typedef pair<int,int> pi;
#define F first
#define S second
#define PB push_back
#define MP make_pair
#define B begin()
#define RB rbegin()
#define E end()
#define RE rend()
#define Z size()
#define REP(i,a,b) for (int i = a; i < b; i++)
#define L length()
#define show(a) cerr << " *** " << a << endl;
#define show1(a) cerr << " /// " << a << endl;
ll gcd(ll a, ll b) {return (b==0? a:gcd(b,a%b));}
ll gcd(ll a, ll b, ll & x, ll & y) {
if (a == 0) {
x = 0;
y = 1;
return b;
}
ll x1, y1;
ll d = gcd(b % a, a, x1, y1);
x = y1 - (b / a) * x1;
y = x1;
return d;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int t,m;
cin >> t >> m;
int occ=0;
int idx = 1;
set<pi>sp;
map<int,int>mp;
while (t--)
{
string str;
cin >> str;
if (str=="alloc")
{
int x;
cin >> x;
if (occ+x>m)
cout << "NULL\n";
else
{
occ+=x;
mp[idx]=x;
sp.insert(MP(idx,x));
cout << idx <<endl;
idx++;
}
}
else if (str=="erase")
{
int x;
cin >> x;
if (mp[x] != 0)
{
sp.erase(MP(x,mp[x]));
mp[x]=0;
}
else
cout << "ILLEGAL_ERASE_ARGUMENT\n";
}
else
{
auto t= sp.B;
int x = t->F-1;
occ=0;
for (auto t : sp)
{
int p,o;
p = t.F;
o=t.S;
sp.erase(t);
sp.insert(MP(p-x,o));
occ+=o;
}
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxjbWF0aD4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3RkbGliLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwovLyB2ZWN0b3IgcHVzaF9iYWNrIHB1c2ggZnJvbnQgdG9wIGVtcHR5IHBvcCBtYWtlX3BhaXIgbG9uZyBsb25nIGluc2VydCBiZWdpbiBlbmQKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgdmVjdG9yPGludD4gdmk7CnR5cGVkZWYgdmVjdG9yPHBhaXIgPGludCxpbnQ+ID4gdnBpOwp0eXBlZGVmIHZlY3Rvcjxsb25nIGxvbmc+IHZsbDsKdHlwZWRlZiBwYWlyPGludCxpbnQ+IHBpOwojZGVmaW5lIEYgZmlyc3QKI2RlZmluZSBTIHNlY29uZAojZGVmaW5lIFBCIHB1c2hfYmFjawojZGVmaW5lIE1QIG1ha2VfcGFpcgojZGVmaW5lIEIgYmVnaW4oKQojZGVmaW5lIFJCIHJiZWdpbigpCiNkZWZpbmUgRSBlbmQoKQojZGVmaW5lIFJFIHJlbmQoKQojZGVmaW5lIFogc2l6ZSgpCiNkZWZpbmUgUkVQKGksYSxiKSBmb3IgKGludCBpID0gYTsgaSA8IGI7IGkrKykKI2RlZmluZSBMIGxlbmd0aCgpCiNkZWZpbmUgc2hvdyhhKSBjZXJyIDw8ICIgKioqICIgPDwgYSA8PCBlbmRsOwojZGVmaW5lIHNob3cxKGEpIGNlcnIgPDwgIiAvLy8gIiA8PCBhIDw8IGVuZGw7CmxsIGdjZChsbCBhLCBsbCBiKSB7cmV0dXJuIChiPT0wPyBhOmdjZChiLGElYikpO30KbGwgZ2NkKGxsIGEsIGxsIGIsIGxsICYgeCwgbGwgJiB5KSB7CglpZiAoYSA9PSAwKSB7CgkJeCA9IDA7CgkJeSA9IDE7CgkJcmV0dXJuIGI7Cgl9CglsbCB4MSwgeTE7CglsbCBkID0gZ2NkKGIgJSBhLCBhLCB4MSwgeTEpOwoJeCA9IHkxIC0gKGIgLyBhKSAqIHgxOwoJeSA9IHgxOwoJcmV0dXJuIGQ7Cn0KaW50IG1haW4oKQp7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKCWNpbi50aWUoTlVMTCk7Cgljb3V0LnRpZShOVUxMKTsKCWludCB0LG07CgljaW4gPj4gdCA+PiBtOwoJaW50IG9jYz0wOwoJaW50IGlkeCA9IDE7CglzZXQ8cGk+c3A7CgltYXA8aW50LGludD5tcDsKCXdoaWxlICh0LS0pCgl7CgkJc3RyaW5nIHN0cjsKCQljaW4gPj4gc3RyOwoJCWlmIChzdHI9PSJhbGxvYyIpCgkJewoJCQlpbnQgeDsKCQkJY2luID4+IHg7CgkJCWlmIChvY2MreD5tKQoJCQkJY291dCA8PCAiTlVMTFxuIjsKCQkJZWxzZQoJCQl7CgkJCQlvY2MrPXg7CgkJCQltcFtpZHhdPXg7CgkJCQlzcC5pbnNlcnQoTVAoaWR4LHgpKTsKCQkJCWNvdXQgPDwgaWR4IDw8ZW5kbDsKCQkJCWlkeCsrOwoJCQl9CgkJfQoJCWVsc2UgaWYgKHN0cj09ImVyYXNlIikKCQl7CgkJCWludCB4OwoJCQljaW4gPj4geDsKCQkJaWYgKG1wW3hdICE9IDApCgkJCXsKCQkJCXNwLmVyYXNlKE1QKHgsbXBbeF0pKTsKCQkJCW1wW3hdPTA7CgkJCX0KCQkJZWxzZQoJCQkJY291dCA8PCAiSUxMRUdBTF9FUkFTRV9BUkdVTUVOVFxuIjsKCQl9CgkJZWxzZQoJCXsKCQkJYXV0byB0PSBzcC5COwoJCQlpbnQgeCA9IHQtPkYtMTsKCQkJb2NjPTA7CgkJCWZvciAoYXV0byB0IDogc3ApCgkJCXsKCQkJCWludCBwLG87CgkJCQlwID0gdC5GOwoJCQkJbz10LlM7CgkJCQlzcC5lcmFzZSh0KTsKCQkJCXNwLmluc2VydChNUChwLXgsbykpOwoJCQkJb2NjKz1vOwoJCQl9CgkJfQoKCX0KfQ==