// O(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

// Legyen (adott m-re): T[p]=|{i | i<m és H(i)<=p}|
// Ki fogjuk használni, hogy abs(H(m)-H(m+1))<=1
// ezzel tree-k helyett tároljuk, hogy mennyivel kell majd növelni a T[] tömb elemeit
// módosításokat az inc[] tömbben tároljuk: T[p]+sum(inc[x]:x<=p) a pontos érték
// adott v=H(m) esetén inc[p]=0 lesz, ha p<=v+1, így
// a következő pozicíóban is a T[] tömb eleme pontos lesz ( hiszen H(m+1)<=v+1 )

#include <iostream>
#include <new>

using namespace std;  

int main(void){
  
  int *T,*inc,h,i,n,a,c,count,u;
  long long int answer;
  
  cin>>n>>c;  
  
  T=new int[2*n+4];
  inc=new int[2*n+4];
  for(i=0;i<2*n+4;i++)T[i]=0,inc[i]=0;
  
  answer=0;
  count=0;
  for(i=1;i<=n;i++){
      cin>>a;
    
      count+=(a>=c);
      
      h=2*count-i+n;
      answer+=T[h];
      
      T[h]++;// inc[h]=0 volt
      u=inc[h+1]+1;T[h+1]+=u;inc[h+1]=0;inc[h+2]+=u;// T[h+1] beállítása, most már h+1-ig minden T[] érték pontos

      answer+=(count>=(i+1)/2); // egész sorozat eddig értékes-e
  }
  
  cout<<answer<<endl;
  return 0;
}
