#pragma GCC optimize("O3") #include #define endl '\n' using namespace std; constexpr int64_t MAXN = 1e6; constexpr int64_t MAXLog = 22; constexpr int64_t NULL_ELEMENT = (1LL<<60)-1; int N; int64_t M; int64_t arr[MAXN]; int LOG2[MAXN+5]; int64_t sparse[MAXLog+2][MAXN+5]; void init() { LOG2[1] = 0; for(int x = 2; x <= MAXN; x++) LOG2[x] = LOG2[x/2] + 1; for(int i = 0; i < N; i++) sparse[0][i] = arr[i]; for(int l = 1; l <= MAXLog; l++) { for(int i = 0;i= N) sparse[l][i] = sparse[l-1][i]; else sparse[l][i] = (sparse[l-1][i]&sparse[l-1][i+(1<<(l-1))]); } } } int64_t Query(int l, int r) //range minimum query { return (sparse[LOG2[r-l+1]][l]&sparse[LOG2[r-l+1]][r - (1<= M) { L = mid+1; ans = mid; } else { R = mid-1; } } return (ans - start+1); } int main() { #ifndef __LOCAL__ freopen("note2.in", "r", stdin); freopen("note2.out", "w", stdout); #endif // __LOCAL__ cin >> N >> M; for (int i = 0; i < N; i++) { cin >> arr[i]; } init(); int64_t ans = 0; for (int i = 0; i < N; i++) { ans += SolveTestcase(i); } cout << ans << endl; return 0; }