#include <bits/stdc++.h>
using namespace std;
#define int long long
// This isn't part of my plan.
const int N = 1e5+5, M = 55, mod = 1e9 +7;
int balls[M][N];
void burn() {
int n , q;
cin >> n >> q;
for(int i = 0,l,r, m ;i < n;i++) {
cin >> l >> r >> m;
balls[m][l]+=1;
balls[m][r+1]-=1;
}
int total[M]={};
for(int i = 1;i < M;i++) {
for(int j = 1;j < N;j++) {
balls[i][j]+=balls[i][j-1];
total[i]+=balls[i][j];
}
}
while(q--) {
int p,x,k;
cin >> p >> x >>k;
if(p == 1) { //insert ball x
balls[k][x]++;
total[k]++;
}
else if (p == 2 ) { //remove ball x
if(balls[k][x])
balls[k][x]--,total[k]--;
}
else { // finding probability that
if(total[k])
cout << fixed << setprecision(6) << (balls[k][x]*1.0/total[k]) << '\n';
else cout << -1 << '\n';
}
}
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int tt=1;
// cin>>tt;
while(tt--)
burn();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+ICAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBpbnQgbG9uZyBsb25nIAovLyBUaGlzIGlzbid0IHBhcnQgb2YgbXkgcGxhbi4gCmNvbnN0IGludCBOID0gMWU1KzUsIE0gPSA1NSwgbW9kID0gMWU5ICs3OwppbnQgYmFsbHNbTV1bTl07CnZvaWQgYnVybigpIHsKICAgaW50IG4gLCBxOwogICBjaW4gPj4gbiA+PiBxOwogCiAgIAogICBmb3IoaW50IGkgPSAwLGwsciwgbSA7aSA8IG47aSsrKSB7CiAgICAgICAgY2luID4+IGwgPj4gciA+PiBtOwogICAgICAgIGJhbGxzW21dW2xdKz0xOwogICAgICAgIGJhbGxzW21dW3IrMV0tPTE7CiAgIH0KICAgaW50IHRvdGFsW01dPXt9OwogICBmb3IoaW50IGkgPSAxO2kgPCBNO2krKykgewogICAgICAgIGZvcihpbnQgaiA9IDE7aiA8IE47aisrKSB7CiAgICAgICAgICAgIGJhbGxzW2ldW2pdKz1iYWxsc1tpXVtqLTFdOwogICAgICAgICAgICB0b3RhbFtpXSs9YmFsbHNbaV1bal07CiAgICAgICAgfSAgIAogICB9CiAgIAogICAgd2hpbGUocS0tKSB7CiAgICAgICAgaW50IHAseCxrOwogICAgICAgIGNpbiA+PiBwID4+IHggPj5rOwogICAgICAgIGlmKHAgPT0gMSkgeyAvL2luc2VydCBiYWxsIHgKICAgICAgICAgICAgYmFsbHNba11beF0rKzsKICAgICAgICAgICAgdG90YWxba10rKzsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAocCA9PSAyICkgeyAvL3JlbW92ZSBiYWxsIHggIAogICAgICAgICAgICBpZihiYWxsc1trXVt4XSkKICAgICAgICAgICAgICAgIGJhbGxzW2tdW3hdLS0sdG90YWxba10tLTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7IC8vIGZpbmRpbmcgcHJvYmFiaWxpdHkgdGhhdCAKICAgICAgICAgICAgaWYodG90YWxba10pCiAgICAgICAgICAgICAgICBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbig2KSA8PCAoYmFsbHNba11beF0qMS4wL3RvdGFsW2tdKSA8PCAnXG4nOwogICAgICAgICAgICBlbHNlIGNvdXQgPDwgLTEgPDwgJ1xuJzsKICAgICAgICB9CiAKICAgIH0KIAp9CiAKc2lnbmVkIG1haW4oKSB7Cmlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKY2luLnRpZShudWxscHRyKTsKI2lmbmRlZiBPTkxJTkVfSlVER0UgICAgCiAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsKICAgIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7CiNlbmRpZgogICAgaW50IHR0PTE7Ci8vIGNpbj4+dHQ7CiAgICB3aGlsZSh0dC0tKSAKICAgICAgICBidXJuKCk7CiAgICByZXR1cm4gMDsKfQo=