#include using namespace std; template struct SparseTable{ vector> dat; vector lookup; typedef function Func; Func f; T e; SparseTable(){} SparseTable(const vector &v, Func f, T e){ initialize(v, f, e); } void initialize(const vector &v, Func fin, T ein){ f = fin; e = ein; int b = 0; while((1<(N, e)); for(int i=0; i>1] + 1; } } T between(int l, int r) { if(l > r) return e; r++; int b = lookup[r-l]; return f(dat[b][l], dat[b][r-(1<> N; vector A(N); for(int i=0; i> A[i]; SparseTable st(A, [](auto a, auto b){ return gcd(a, b); }, 0); int r = 0; int64_t ans = 0; for(int l=0; l