#include<stdio.h>
#include<map>
#include<set>
#include<iostream>
struct QP{
long long int x,y,z,no,add;
bool operator<(const QP& s)const{
if(z!=s.z)return z<s.z;
if(x!=s.x)return x<s.x;
if(y!=s.y)return y<s.y;
if(add!=s.add)return add<s.add;
return no<s.no;
}
void set(long long int x1,long long int y1,long long int z1,int a){
x=x1;
y=y1;
z=z1;
add=a;
}
};
struct FP{
long long int x,y;
int add;
bool operator<(const FP& fp)const{
if(x!=fp.x)return x<fp.x;
if(y!=fp.y)return y<fp.y;
return add<fp.add;
}
};
int main(){
int n,k;
long long int ans=0;
scanf("%d %d",&n,&k);
std::map<FP,int> memo;
std::map<FP,int>::iterator mIt;
std::set<QP> allPs;
std::set<QP>::iterator it;
QP qp;
FP fp;
long long int x1,y1,z1,x2,y2,z2;
for(int i=0;i<n;i++){
//qp.set(x,y,z,isIn,isDell)
std::cin>>x1>>y1>>z1>>x2>>y2>>z2;
qp.no=i;
//上面
qp.set(x1,y1,z1,1);
allPs.insert(qp);
qp.set(x2,y1,z1,-1);
allPs.insert(qp);
qp.set(x1,y2,z1,-1);
allPs.insert(qp);
qp.set(x2,y2,z1,1);
allPs.insert(qp);
//下面
qp.set(x1,y1,z2,-1);
allPs.insert(qp);
qp.set(x2,y1,z2,1);
allPs.insert(qp);
qp.set(x1,y2,z2,1);
allPs.insert(qp);
qp.set(x2,y2,z2,-1);
allPs.insert(qp);
}
long long int oldZ=(*allPs.begin()).z ,S=0;
it=allPs.begin();
while(it!=allPs.end()){
qp=(*it);
if(qp.z==oldZ){
fp.x=qp.x;
fp.y=qp.y;
fp.add=qp.add;
long long int add=qp.add;
if(memo.find(fp)==memo.end())memo[fp]=0;
memo[fp]+=add;
it++;
}else
{
mIt=memo.begin();
long long int oldX=(*mIt).first.x,lenY=0;
std::map<long long int,int> lineMemo;
std::map<long long int,int>::iterator lIt;
while(mIt!=memo.end()){
fp=(*mIt).first;
int add=(*mIt).second;
if(fp.x==oldX){
if(lineMemo.find(fp.y)==lineMemo.end())lineMemo[fp.y]=0;
lineMemo[fp.y]+=add;
mIt++;
}else{
long long int oldY=(*lineMemo.begin()).first;
int inOut=0;
for(lIt=lineMemo.begin();lIt!=lineMemo.end();lIt++){
if(k<=inOut){
lenY+=((*lIt).first-oldY);
}
oldY=(*lIt).first;
inOut+=(*lIt).second;
}
S+=lenY*(fp.x-oldX);
oldX=fp.x;
lenY=0;
}
}
ans+=S*(qp.z-oldZ);
oldZ=qp.z;
S=0;
}
}
std::cout<<ans<<"\n";
}