#include <iostream>

using namespace std;

int main() {
  int N;
  string s,t;
  cin >> N >> s;
  for (char c: s) {
    t.append(1,c);
    if (t.length()>2 && t.substr(t.length()-3,3) == "fox") {
      t.resize(t.length()-3);
    }
  }

  cout << t.length() << endl;
}

//IQ134高知能系Vtuberの高井茅乃です。
//Twitter: https://twitter.com/takaichino
//YouTube: https://www.youtube.com/channel/UCTOxnI3eOI_o1HRgzq-LEZw

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

#define INF INT_MAX
#define LLINF LLONG_MAX
#define REP(i,n) for(int i=0;i<n;i++)
#define REP1(i,n) for(int i=1;i<=n;i++)
#define MODA 1000000007
#define MODB  998244353 

template <typename T>
std::istream& operator>>(std::istream& is, std::vector<T>& vec) {
    for (T& x: vec) { is >> x; }
    return is;
}

int mobius[1000001] = {};

int main() {
	ll ans = 0;
	ll tmp = 0;
	//int n; cin >> n;
    ll L, R; cin >> L >> R;

	//エラトステネスの篩でP_max以下の素数vector primeをつくる
	bool *pr;
	int P_max = 2000000; //10^6くらいまでが現実的か
	pr = (bool*)malloc(sizeof(bool) * (P_max+1));
	REP(i, P_max + 1) pr[i] = true;
	pr[0] = false;
	pr[1] = false;
	int dx[P_max] = {}; // xを割り切る最小の素数の配列(素因数分解に使う)
	for(int i = 2; i * i <= P_max; i++){ 
		if(pr[i] == true){
			for(int j = 2 * i; j <= P_max; j+=i){
				pr[j] = false;
				if(dx[j] == 0) dx[j] = i;
			}
		}
	}
	vector<int> prime;
	for(int i = 2; i <= P_max; i++){
		if(pr[i]) prime.push_back(i);
	}
	//

	//配列dxを使って整数Xの素因数分解の結果をmapで返す。
	map<int, int> prf;
    for(int mo = 2; mo <= R; mo++){
        int X = mo;
        int diving = X; //これをどんどん割っていく。dividingが正しい
        prf.clear();
        while(dx[diving] != 0){
            prf[dx[diving]]++;
            diving /= dx[diving];
            //重複なしで割り切れる素数を列挙する場合は上の行をコメントアウトして下を使う
            //int nowdx = dx[diving]; while (diving % nowdx == 0) diving /= nowdx;
        }
        if(diving > 1)prf[diving]++;
        //これは素因数分解の結果が見たくなったときに使うもの
        //for(auto i = prf.begin(); i!= prf.end(); i++) cout << i->first << "," << i->second << " "; cout << endl;
        //
        //メビウス関数の計算
        mobius[mo] = 1;
        for(auto i = prf.begin(); i!= prf.end(); i++){
            if(i->second == 1) mobius[mo] *= -1;
            else if(i->second > 1) mobius[mo] = 0;
        }
        //メビウス関数の結果の反映
        ll a = R / mo - (L-1) / mo;
        ans += (-1LL) * mobius[mo] * a * (a-1) / 2;
    }
    for(int k = max(2LL, L); k <= R; k++){
        ans -= R / k - (L-1) / k - 1;
    }
	cout << ans * 2 << endl;
}