#include <bits/stdc++.h>
#define ll long long int
#define ld long double
#define nl "\n"
#define ull unsigned long long
#define rv return void
#define str string
#define all(x) x.begin(), x.end()
#define allr(x) x.rbegin(), x.rend()
#define vec vector
#define fixed(n) fixed << setprecision(n)
#define Moageza ios::sync_with_stdio(false);cout.tie(NULL);cin.tie(NULL);
using namespace std;
const ll mod = 1e9+7,n=105;
//////////////////////////////////////////////////////
ll sum(ll i){
return (i*(i+1))/2;
}
void solve(){
int a,b;cin >> a >> b;
vec<ll> v;
for(int i=1;i<=int(1e5);i++){
v.push_back(sum(i));
}
ll c=0,d=0;
for(int i=0;i<v.size();i++){
int l=0,r=v.size()-1,k=-1,kk=-1;
while(l <= r){
int mid = (l + r) / 2;
if(v[i]+v[mid]>b)r= mid - 1;
else if(v[i]+v[mid]<a)l= mid + 1;
else {
k= mid;
l= mid + 1;
}
}l=0,r=v.size()-1;
while(l <= r){
int mid = (l + r) / 2;
if(v[i]+v[mid]>b)r= mid - 1;
else if(v[i]+v[mid]<a)l= mid + 1;
else {
kk= mid;
r= mid - 1;
}
}
if(k!=-1){
c+=(k-kk+1);
if(i>=kk&&i<=k)c--,d++;
}
// cout<<k<<" "<<kk<<nl;
}
cout<<c/2+d;
}
int main()
{
Moageza
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
#endif
int t = 1;
cin >> t;
while (t--) {
solve();
cout << nl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nIGludAojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgbmwgIlxuIgojZGVmaW5lIHVsbCB1bnNpZ25lZCBsb25nIGxvbmcKI2RlZmluZSBydiByZXR1cm4gdm9pZAojZGVmaW5lIHN0ciBzdHJpbmcKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCiNkZWZpbmUgYWxscih4KSB4LnJiZWdpbigpLCB4LnJlbmQoKQojZGVmaW5lIHZlYyB2ZWN0b3IKI2RlZmluZSBmaXhlZChuKSBmaXhlZCA8PCBzZXRwcmVjaXNpb24obikKI2RlZmluZSBNb2FnZXphIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTtjb3V0LnRpZShOVUxMKTtjaW4udGllKE5VTEwpOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBsbCBtb2QgPSAxZTkrNyxuPTEwNTsKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmxsIHN1bShsbCBpKXsKICAgIHJldHVybiAoaSooaSsxKSkvMjsKfQp2b2lkIHNvbHZlKCl7CiAgaW50IGEsYjtjaW4gPj4gYSA+PiBiOwogIHZlYzxsbD4gdjsKICBmb3IoaW50IGk9MTtpPD1pbnQoMWU1KTtpKyspewogICAgdi5wdXNoX2JhY2soc3VtKGkpKTsKICB9CiAgbGwgYz0wLGQ9MDsKICBmb3IoaW50IGk9MDtpPHYuc2l6ZSgpO2krKyl7CiAgICBpbnQgbD0wLHI9di5zaXplKCktMSxrPS0xLGtrPS0xOwogICAgd2hpbGUobCA8PSByKXsKICAgICAgICBpbnQgbWlkID0gKGwgKyByKSAvIDI7CiAgICAgICAgaWYodltpXSt2W21pZF0+YilyPSBtaWQgLSAxOwogICAgICAgIGVsc2UgaWYodltpXSt2W21pZF08YSlsPSBtaWQgKyAxOwogICAgICAgIGVsc2UgewogICAgICAgICAgIGs9IG1pZDsKICAgICAgICAgICBsPSBtaWQgKyAxOwogICAgICAgIH0KICAgIH1sPTAscj12LnNpemUoKS0xOwogICAgd2hpbGUobCA8PSByKXsKICAgICAgICBpbnQgbWlkID0gKGwgKyByKSAvIDI7CiAgICAgICAgaWYodltpXSt2W21pZF0+YilyPSBtaWQgLSAxOwogICAgICAgIGVsc2UgaWYodltpXSt2W21pZF08YSlsPSBtaWQgKyAxOwogICAgICAgIGVsc2UgewogICAgICAgICAgIGtrPSBtaWQ7CiAgICAgICAgICAgcj0gbWlkIC0gMTsKICAgICAgICB9CiAgICB9CiAgICBpZihrIT0tMSl7CiAgICAgICAgYys9KGsta2srMSk7CiAgICAgICAgaWYoaT49a2smJmk8PWspYy0tLGQrKzsKICAgIH0KICAgIC8vIGNvdXQ8PGs8PCIgIjw8a2s8PG5sOwogIH0KICBjb3V0PDxjLzIrZDsKfQppbnQgbWFpbigpCnsKICAgTW9hZ2V6YQogICAgI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgICAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTtmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwogICAgI2VuZGlmCiAgICBpbnQgdCA9IDE7CiAgICAgY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgICAgICBjb3V0IDw8IG5sOwogICAgfQogICAgcmV0dXJuIDA7Cn0=