#include <bits/stdc++.h>
using namespace std;
#define pdd pair<double, double>
// this function return the intersecting point
//if lines are parallel thenit returns INT_MAX
pdd displayPoint(pdd P)
{
return make_pair(P.first,P.second);
}
pdd lineLineIntersection(pdd A, pdd B, pdd C, pdd D)
{
double a1 = B.second - A.second;
double b1 = A.first - B.first;
double c1 = a1*(A.first) + b1*(A.second);
double a2 = D.second - C.second;
double b2 = C.first - D.first;
double c2 = a2*(C.first)+ b2*(C.second);
double determinant = a1*b2 - a2*b1;
if (determinant == 0)
{
return make_pair(INT_MAX,INT_MAX);
}
else
{
double x = (b2*c1 - b1*c2)/determinant;
double y = (a1*c2 - a2*c1)/determinant;
return make_pair(x, y);
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
long long int a[100000];
long long int x1,x2,y;
long long int n,q;
cin>>n>>q;
for(long long int i=1;i<=n;i++)
{
cin>>a[i];
}
long long int count=0;
while(q--)
{
count=0;
cin>>x1>>x2>>y;
for(long long int i=1;i<n;i++)
{
pdd A = make_pair(i,a[i]);
pdd B = make_pair(i+1,a[i+1]);
pdd C = make_pair(x1, y);
pdd D = make_pair(x2,y);
pdd intersection = lineLineIntersection(A, B, C, D);
//if lines are parallel
if (intersection.first == INT_MAX && intersection.second==INT_MAX)
{
if((y!=a[i] || y!=a[i+1]) || (i+1==x1 || i==x2) || i+1<x1 ||i>x2 )
{continue;}
count++;
}
else
{
//if lines are intersecting at a arbitary point
pdd point =displayPoint(intersection);
//to eliminate arbitary points and considering required points
if((point.first>=x1 && point.first<=x2 )&& ((a[i]>=int(point.second) && a[i+1]<=int(point.second)) || (a[i]<=int(point.second) && a[i+1]>=int(point.second))))
{
if((i==x2 && a[i]==y)||(i+1==x1 && a[i+1]==y)){continue;}
count++;
}
}
}
cout<<count<<endl;
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAKI2RlZmluZSBwZGQgcGFpcjxkb3VibGUsIGRvdWJsZT4gCiAKLy8gdGhpcyBmdW5jdGlvbiByZXR1cm4gdGhlIGludGVyc2VjdGluZyBwb2ludAovL2lmIGxpbmVzIGFyZSBwYXJhbGxlbCB0aGVuaXQgcmV0dXJucyBJTlRfTUFYCgpwZGQgZGlzcGxheVBvaW50KHBkZCBQKSAKeyAKICAgIHJldHVybiBtYWtlX3BhaXIoUC5maXJzdCxQLnNlY29uZCk7Cn0gCiAgCnBkZCBsaW5lTGluZUludGVyc2VjdGlvbihwZGQgQSwgcGRkIEIsIHBkZCBDLCBwZGQgRCkgCnsgCiAgIAogICAgZG91YmxlIGExID0gQi5zZWNvbmQgLSBBLnNlY29uZDsgCiAgICBkb3VibGUgYjEgPSBBLmZpcnN0IC0gQi5maXJzdDsgCiAgICBkb3VibGUgYzEgPSBhMSooQS5maXJzdCkgKyBiMSooQS5zZWNvbmQpOyAKICAgIGRvdWJsZSBhMiA9IEQuc2Vjb25kIC0gQy5zZWNvbmQ7IAogICAgZG91YmxlIGIyID0gQy5maXJzdCAtIEQuZmlyc3Q7IAogICAgZG91YmxlIGMyID0gYTIqKEMuZmlyc3QpKyBiMiooQy5zZWNvbmQpOyAKICAKICAgIGRvdWJsZSBkZXRlcm1pbmFudCA9IGExKmIyIC0gYTIqYjE7IAogIAogICAgaWYgKGRldGVybWluYW50ID09IDApIAogICAgeyAKICAgICAgICByZXR1cm4gbWFrZV9wYWlyKElOVF9NQVgsSU5UX01BWCk7IAogICAgfSAKICAgIGVsc2UKICAgIHsgCiAgICAgICAgZG91YmxlIHggPSAoYjIqYzEgLSBiMSpjMikvZGV0ZXJtaW5hbnQ7IAogICAgICAgIGRvdWJsZSB5ID0gKGExKmMyIC0gYTIqYzEpL2RldGVybWluYW50OyAKICAgICAgICByZXR1cm4gbWFrZV9wYWlyKHgsIHkpOyAKICAgIH0gCn0gCgoKICBpbnQgbWFpbigpCnsKIGludCB0OwogY2luPj50Owogd2hpbGUodC0tKQogeyAKICAKIGxvbmcgbG9uZyAgaW50ICBhWzEwMDAwMF07CiBsb25nIGxvbmcgaW50ICB4MSx4Mix5OwogbG9uZyBsb25nIGludCBuLHE7CiAgY2luPj5uPj5xOwogIGZvcihsb25nIGxvbmcgaW50IGk9MTtpPD1uO2krKykKICB7CiAgIGNpbj4+YVtpXTsKICB9CiBsb25nIGxvbmcgaW50IGNvdW50PTA7CiAgICB3aGlsZShxLS0pCiAgewogICBjb3VudD0wOwogIGNpbj4+eDE+PngyPj55OwoKCiBmb3IobG9uZyBsb25nIGludCBpPTE7aTxuO2krKykgCiB7CiAgICAgcGRkIEEgPSBtYWtlX3BhaXIoaSxhW2ldKTsKICAgIHBkZCBCID0gbWFrZV9wYWlyKGkrMSxhW2krMV0pOwogICAgcGRkIEMgPSBtYWtlX3BhaXIoeDEsIHkpOwogICAgcGRkIEQgPSBtYWtlX3BhaXIoeDIseSk7CiAgICBwZGQgaW50ZXJzZWN0aW9uID0gbGluZUxpbmVJbnRlcnNlY3Rpb24oQSwgQiwgQywgRCk7IAogICAvL2lmIGxpbmVzIGFyZSBwYXJhbGxlbAogIGlmIChpbnRlcnNlY3Rpb24uZmlyc3QgPT0gSU5UX01BWCAmJiAgaW50ZXJzZWN0aW9uLnNlY29uZD09SU5UX01BWCkgCiAgICB7IAogICAgIGlmKCh5IT1hW2ldIHx8IHkhPWFbaSsxXSkgfHwgKGkrMT09eDEgfHwgaT09eDIpIHx8IGkrMTx4MSB8fGk+eDIgKQogICAgIHtjb250aW51ZTt9CiAgICAgIGNvdW50Kys7CiAgICAgCiAgICB9IAogIAogICAgZWxzZQogICAgeyAKICAgICAgICAvL2lmIGxpbmVzIGFyZSBpbnRlcnNlY3RpbmcgYXQgYSBhcmJpdGFyeSBwb2ludCAKICAgICAgICAgIHBkZCBwb2ludCA9ZGlzcGxheVBvaW50KGludGVyc2VjdGlvbik7Ci8vdG8gZWxpbWluYXRlIGFyYml0YXJ5IHBvaW50cyBhbmQgY29uc2lkZXJpbmcgcmVxdWlyZWQgcG9pbnRzCiAgIGlmKChwb2ludC5maXJzdD49eDEgJiYgcG9pbnQuZmlyc3Q8PXgyICkmJiAoKGFbaV0+PWludChwb2ludC5zZWNvbmQpICYmIGFbaSsxXTw9aW50KHBvaW50LnNlY29uZCkpIHx8IChhW2ldPD1pbnQocG9pbnQuc2Vjb25kKSAmJiBhW2krMV0+PWludChwb2ludC5zZWNvbmQpKSkpCiAgICAgCiAgICAgICB7CiAgICAgICAgaWYoKGk9PXgyICYmIGFbaV09PXkpfHwoaSsxPT14MSAmJiBhW2krMV09PXkpKXtjb250aW51ZTt9IAogICAgICAKICAgICAgICBjb3VudCsrOwogICAgICAgfQogICB9Cn0gCmNvdXQ8PGNvdW50PDxlbmRsOwp9CiAKfQogcmV0dXJuIDA7IAp9Cg==