#include <bits/stdc++.h>
using namespace std;
#define for1(i,m,n) for(int i=m,n_=(n);i<=n_;i++)
#define for0(i,m,n) for(int i=m;i<n;i++)
#define forr1(i,m,n) for(int i=m;i>=n;i--)
#define forr2(i,m,n) for(int i=m;i>n;i--)
#define mini(a,b) (a)=min((a),(b))
#define maxi(a,b) (a)=max((a),(b))
#define ll long long
#define el '\n'
#define fi first
#define se second
#define ii pair<int,int>
#define vll(i) i.begin(),i.end()
#define pb push_back
#define fr front()
#define MASK(i) ((1ll) << (i))
#define BIT(i,n) (((i)>>(n))&1)
const int N=1e5+11;
const ll MOD=1e18;
struct tri{
int val,x,y;
bool operator < (const tri &other ) const {
return val<other.val;
}
};
int dsu[N],a[N];
vector<tri>adj;
vector<int>s;
vector<ii>ans;
unordered_map<int,ll>ans_;
int findd(int x){
if(dsu[x]==0) return x;
return dsu[x]=findd(dsu[x]);
}
void mergee(int x,int y){
if(y>x) swap(x,y);
a[x]+=a[y];
dsu[y]=x;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
freopen("costquery.inp", "r", stdin);
freopen("costquery.out", "w", stdout);
int n,q;cin>>n>>q;
for0(i,1,n) {
int x,y,val;cin>>x>>y>>val;
adj.pb({val,x,y});
}
sort(vll(adj));
for1(i,1,q){
int l,r;cin>>l>>r;
l--;
ans.pb({l,r});
s.pb(l);
s.pb(r);
}
sort(vll(s));
s.erase(unique(vll(s)),s.end());
ll numpair=0;
auto adj_=adj.begin();
for1(i,1,n) a[i]=1;
for(auto s_:s){
while(adj_!=adj.end()){
auto [val,x,y]=*adj_;
if(val>s_) break;
int x_=findd(x),y_=findd(y);
//cout<<x_<<' '<<y_<<el;
numpair+=1ll*a[x_]*a[y_];
//cout<<numpair<<el<<el;
mergee(x_,y_);
adj_++;
}
ans_[s_]=numpair;
}
//for1(i,1,n) cout<<i<<' '<<findd(i)<<el;
for(auto [l,r]:ans){
cout<<ans_[r]-ans_[l]<<' ' ;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGZvcjEoaSxtLG4pIGZvcihpbnQgaT1tLG5fPShuKTtpPD1uXztpKyspCiNkZWZpbmUgZm9yMChpLG0sbikgZm9yKGludCBpPW07aTxuO2krKykKI2RlZmluZSBmb3JyMShpLG0sbikgZm9yKGludCBpPW07aT49bjtpLS0pCiNkZWZpbmUgZm9ycjIoaSxtLG4pIGZvcihpbnQgaT1tO2k+bjtpLS0pCiNkZWZpbmUgbWluaShhLGIpIChhKT1taW4oKGEpLChiKSkKI2RlZmluZSBtYXhpKGEsYikgKGEpPW1heCgoYSksKGIpKQojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsICdcbicKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGlpIHBhaXI8aW50LGludD4KI2RlZmluZSB2bGwoaSkgaS5iZWdpbigpLGkuZW5kKCkKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmciBmcm9udCgpCgojZGVmaW5lIE1BU0soaSkgKCgxbGwpIDw8IChpKSkKI2RlZmluZSBCSVQoaSxuKSAoKChpKT4+KG4pKSYxKQoKY29uc3QgaW50IE49MWU1KzExOwpjb25zdCBsbCBNT0Q9MWUxODsKc3RydWN0IHRyaXsKIGludCB2YWwseCx5OwogYm9vbCBvcGVyYXRvciA8IChjb25zdCB0cmkgJm90aGVyICkgY29uc3QgewogIHJldHVybiB2YWw8b3RoZXIudmFsOwogfQp9OwppbnQgZHN1W05dLGFbTl07CnZlY3Rvcjx0cmk+YWRqOwp2ZWN0b3I8aW50PnM7CnZlY3RvcjxpaT5hbnM7CnVub3JkZXJlZF9tYXA8aW50LGxsPmFuc187CmludCBmaW5kZChpbnQgeCl7CiAgaWYoZHN1W3hdPT0wKSByZXR1cm4geDsKICByZXR1cm4gZHN1W3hdPWZpbmRkKGRzdVt4XSk7Cn0Kdm9pZCBtZXJnZWUoaW50IHgsaW50IHkpewogIGlmKHk+eCkgc3dhcCh4LHkpOwogIGFbeF0rPWFbeV07CiAgZHN1W3ldPXg7Cn0KaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKZnJlb3BlbigiY29zdHF1ZXJ5LmlucCIsICJyIiwgc3RkaW4pOwpmcmVvcGVuKCJjb3N0cXVlcnkub3V0IiwgInciLCBzdGRvdXQpOwppbnQgbixxO2Npbj4+bj4+cTsKZm9yMChpLDEsbikgewogIGludCB4LHksdmFsO2Npbj4+eD4+eT4+dmFsOwogIGFkai5wYih7dmFsLHgseX0pOwp9CnNvcnQodmxsKGFkaikpOwoKZm9yMShpLDEscSl7CiBpbnQgbCxyO2Npbj4+bD4+cjsKIGwtLTsKIGFucy5wYih7bCxyfSk7CiBzLnBiKGwpOwogcy5wYihyKTsKfQpzb3J0KHZsbChzKSk7CnMuZXJhc2UodW5pcXVlKHZsbChzKSkscy5lbmQoKSk7CmxsIG51bXBhaXI9MDsKYXV0byBhZGpfPWFkai5iZWdpbigpOwpmb3IxKGksMSxuKSBhW2ldPTE7CmZvcihhdXRvIHNfOnMpewoKICAgIHdoaWxlKGFkal8hPWFkai5lbmQoKSl7CiAgICAgICAgICAgIGF1dG8gW3ZhbCx4LHldPSphZGpfOwogICAgaWYodmFsPnNfKSBicmVhazsKICAgICAgICBpbnQgeF89ZmluZGQoeCkseV89ZmluZGQoeSk7CiAgICAgICAgLy9jb3V0PDx4Xzw8JyAnPDx5Xzw8ZWw7CiAgICAgICAgbnVtcGFpcis9MWxsKmFbeF9dKmFbeV9dOwogICAgICAgIC8vY291dDw8bnVtcGFpcjw8ZWw8PGVsOwogICAgICAgIG1lcmdlZSh4Xyx5Xyk7CiAgICAgICAgYWRqXysrOwogICAgfQogICAgYW5zX1tzX109bnVtcGFpcjsKfQovL2ZvcjEoaSwxLG4pIGNvdXQ8PGk8PCcgJzw8ZmluZGQoaSk8PGVsOwpmb3IoYXV0byBbbCxyXTphbnMpewogICAgY291dDw8YW5zX1tyXS1hbnNfW2xdPDwnICcgOwp9Cn0K