#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 3e5+5;
array<int, 2> id[N];
multiset<array<int, 2>> all;
void add(int l, int r){
all.insert({l, r});
}
void remove(int l, int r){
all.erase(all.find({l, r}));
}
int cnt(int l, int r){
int ans = 0;
for(auto [L, R]: all){
if(L <= l and R >= r) ans++;
}
return ans;
}
int cnt_sz(int l, int r, int k){
int ans = 0;
for(auto [L, R]: all){
if(L < l) continue;
if(L > r) continue;
if((R-L+1) < k) continue;
ans++;
}
return ans;
}
// for(int i=1; i<=n; i++)
void solve(){
int q, t; cin >> q >> t;
int ID = 1;
int last = 0;
while(q--){
int tip, l, r, k; cin >> tip;
// for(auto [L, R]: all) cout << L << " " << R << endl;
// cout << endl;
// cout << endl;
if(tip == 1){
int a, b; cin >> a >> b;
l = a ^ (t * last);
r = b ^ (t * last);
if(l > r) swap(l, r);
add(l, r);
id[ID++] = {l, r};
continue;
}
if(tip == 2){
int rem; cin >> rem;
l = id[rem][0];
r = id[rem][1];
remove(l, r);
continue;
}
int a, b; cin >> a >> b >> k;
l = a ^ (t * last);
r = b ^ (t * last);
if(l > r) swap(l, r);
if(r-l+1 < k) {
last = 0;
cout << last << '\n';
continue;
}
last = 0;
last += cnt(l-1, l+k-1);
last += cnt(r-k+1, r+1);
last -= cnt(l-1, r+1);
last += cnt_sz(l, r-k+1, k) - cnt(r-k+1, r+1) + cnt(l-1, r+1);
cout << last << '\n';
}
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
solve();
}