#include #include #include #include namespace mp = boost::multiprecision; using Bint = mp::cpp_int; using namespace std; using namespace atcoder; #define rep(i, n) for(int i=0;i<(n);++i) #define rep1(i, n) for(int i=1;i<=(n);i++) #define ll long long using mint = modint998244353; using P = pair; using lb = long double; using T = tuple; #ifdef LOCAL # include # define dbg(...) debug_print::multi_print(#__VA_ARGS__, __VA_ARGS__) #else # define dbg(...) (static_cast(0)) #endif int main() { Bint x, n; cin >> x >> n; Bint sum = Bint(n)*Bint(n+1)/2; if(abs(x)>sum) { if(x>0) cout << x-sum << endl; else cout << sum+x << endl; return 0; } Bint l = 0; Bint r = n; while(r-l>1) { Bint mid = (l+r)/2; if(mid*(mid+1)/2>abs(x)) r = mid; else l = mid; } if(x>0) { x -= l*(l+1)/2; if((n-l)%2) { x -= l+1; x -= (n-l)/2; } else{ x += (n-l)/2; } cout << x << endl; } else{ x += l*(l+1)/2; if((n-l)%2) { x += l+1; x += (n-l)/2; } else{ x -= (n-l)/2; } cout << x << endl; } return 0; }