// O(n*log(n)) megoldás
// Legyen F(m)=|{i | a[i]>=c és i<=m}|, azaz c-nél nem kisebb tagok száma az első m tag között
// Belátható, hogy (a[k],..,a[m]) pontosan akkor értékes, ha F(m)-F(k-1)>=(m-k+1)/2 ( és k<=m )
// Legyen G(m)=2*F(m)-m
// Kell: G(m)-G(k-1)>=0, azaz G(k-1)<=G(m) ( és persze k<=m )
// Legyen H(m)=G(m)+n, ekkor 0<=H(m)<=2*n

#include <iostream>
#include <new>

using namespace std;

int main(void){
  
  int **tree,pow2,depth,i,n,c,a,d,count,h,size,pos,pos2;
  long long int answer;
  
  cin>>n>>c;  
  
  for(pow2=1,depth=0;pow2<2*n+1;pow2<<=1,depth++);
  
  tree=new int*[depth+1];
  for(d=0;d<=depth;d++){
    size=1+((2*n+1)>>d);
    tree[d]=new int[size];
    for(i=0;i<size;i++)tree[d][i]=0;
  }
  
  answer=0;
  count=0;
  for(i=1;i<=n;i++){
      cin>>a;
    
      count+=(a>=c);
      h=2*count-i+n;
      pos=-1;
      pow2=1<<depth;
      for(d=depth;d>=0;d--){
	      pos2=pos+pow2;
	      if(pos2<=h)pos=pos2,answer+=tree[d][pos>>d];
          pow2>>=1;
      }
      answer+=(count>=(i+1)/2); // egész sorozat eddig értékes-e
      for(d=0;d<=depth;d++)tree[d][h>>d]++;
  }
  cout<<answer<<endl;
  
  return 0;
}
