#include using namespace std; // #include // using namespace atcoder; typedef long long ll; typedef pair P; typedef pair PLL; typedef pair PP; typedef vector llVEC; typedef vector

PVEC; typedef priority_queue > PPQ; typedef priority_queue > llPQ; #define rep(i,a,n) for(ll i = a;i < n;i++) #define rrep(i,a,n) for(ll i = n-1; i >= a;i--) #define index_check(i,n) if(i > n-1 || i < 0) continue; #define LINF (ll)1e18 #define INF (int)1e9 #define fs first #define sc second template ll sz(vector &vec){ return (ll)vec.size(); } ll sz(string &s){ return (ll)s.size(); } ll gcd(ll a,ll b){ return ((!b) ?a :gcd(b, a%b)); } ll lcm(ll a,ll b){ return a / gcd(a,b) * b; } const ll MOD = 998244353; template struct modint{ ll x; modint() : x(0) {} modint(ll a): x((a % MOD + MOD) % MOD) {} bool operator!() const{return !x;} bool operator<(const modint &a) const{ modint res(*this); return res.x < a.x; } bool operator>(const modint &a) const{ modint res(*this); return res.x > a.x; } modint &operator+=(const modint &a){ if((x += a.x) >= MOD) x -= MOD; return *this; } modint &operator-=(const modint &a){ if((x += MOD - a.x) >= MOD) x -= MOD; return *this; } modint &operator*=(const modint &a){ (x *= a.x) %= MOD; return *this; } modint &operator/=(const modint &a){ *this *= a.inv(); return *this; } modint &operator%=(const modint &a){ x %= a.x; return *this; } modint operator-() const{ return modint(-x); } modint operator+(const modint &a) const{ return modint(*this) += a; } modint operator-(const modint &a) const{ return modint(*this) -= a; } modint operator*(const modint &a) const{ return modint(*this) *= a; } modint operator/(const modint &a) const{ return modint(*this) /= a; } modint operator%(const modint &a) const{ return modint(*this) %= a; } bool operator==(const modint &a) const{ return x == a.x; } bool operator!=(const modint &a) const{ return x != a.x; } modint pow(ll n) const{ modint res(1), a(x); while(n > 0){ if(n & 1) res *= a; a *= a; n /= 2; } return res; } modint inv() const{ return this->pow(MOD-2); } friend ostream &operator<<(ostream &os, const modint &m){ return os << m.x; } friend istream &operator>>(istream &is, modint &m){ ll t; is >> t; m = modint(t); return (is); } static ll get_mod(){ return MOD; } }; using mint = modint; int main(){ ll n,l; cin >> n >> l; mint temp = 2; temp = temp.pow((ll)ceil((long double)n/l))-1; cout << temp << endl; return 0; }