#include<iostream>
#include<cstdio>
using namespace std;
const int N = 1e5 + 5;
int f[N<<2];//区间数之和
int lazy[N<<2];//暂存变化,用于是否进行pushdown 的推断
void pushdown(int root, int mid) {//往下推,lazy与f的变更
int rt=root<<1;
int left=mid>>1;
if (lazy[root]){
lazy[rt ] = lazy[root];//这个是直接变成lazy[root]就是说,update 里面是变值操作
/*如果是加减操作*/
/*lazy[rt]+=lazy[root];
lazy[rt+1]+=lazy[root];
f[rt]+=f[root];
f[rt+1]+=f[root];
lazy[root]=0;*/
lazy[rt+1] = lazy[root];
f[rt] = lazy[root]*(mid-left);
f[rt+1] = lazy[root]*(mid >> 1);
lazy[root] = 0;
}
}
void build(int left, int right, int root){//建树
lazy[root] = 0;
if (left == right){
f[root] = 1; //赋初值,有时候是a[i]就是主函数里输进的数据
return;
}
int mid = (left + right) >> 1;
int rt=root<<1;
build(left, mid, rt);
build(mid+ 1, right, rt+1);
f[root] = f[rt] + f[rt+1];//就是没有单独拿出来的pushup,用于update最下面与build最下面
/*在f存储区间之和,即题意要求区间之和时,用上面那个*/
/*如果要求最值,那就:
f[root]=max/min(f[rt],f[rt+1]);*/
}
//有时候是区间更新与单点更新一块儿出来的,单点更新见下面
/*void update(int root,int left,int right){
if(a<=left&&b>=right){
lazy[root]++;
f[root]++;
return ;
}*/
void update(int uleft,int uright, int x, int left, int right, int root) {
if (uleft<= left && right<=uright) {
lazy[root] = x;//更新,记录下更新后的数
f[root]= (int)x*(right - left + 1);// 更新后的区间和
return;
}
pushdown(root,right-left+1);
int mid = (left + right) >> 1;
int rt=root<<1;
if (uleft <= mid) {
update(uleft, uright, x, left, mid, rt);
}
if (uright > mid) {
update(uleft, uright, x , mid+1, right, rt+1);
}
f[root] = f[rt] + f[rt +1];
}
//因为此题是要求区间之和,所以输出只要输出根节点的f即可
/*若要求数量或者部分区间的和或者区间中的最值,需要一个query查询
int query(int qleft,int qright,int root,int left,int right)//注意有时候要换成long long
{
if(qleft<=left&&qright>=right)
{
return f[root];
}
int mid = (left+right)/2;
int ans = 0;
int rt=root<<1;
pushdown(root);
if(mid>=qleft)
{
ans = max(ans,query(qleft,qright,rt,left,mid));
}
if(mid<qright)
{
ans = max(ans,query(qleft,qright,rt+1,mid+1,right));
}
return ans;
}*/
int main() {
int t;
int a, b, c;
int k = 1;
scanf("%d",&t);
while (t--) {
int n, m;
scanf("%d%d",&n,&m);
build(1, n, 1);
while (m--) {
scanf("%d%d%d",&a,&b);
update(a, b, c, 1, n,, .);
}
printf("Case %d: The total value of the hook is %d.\n", k++, f[1]);
}
return 0;
}