/*
这题正解竟然分块,坑啊....
此代码不正确...
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
const int mod=998244353;
const int maxn=30000000;
ll l,r,ans=0,prime[]={0,2,3,5,7,11,13,17,19,23,29};
int main(){
cin>>l>>r;
int now,flag;
ll res=0;
for(int i=1;i<=sqrt(r);i++){
flag=false;
for(int j=1;j<=10;j++){
if(prime[j]>=i) break;
if(i%prime[j]==0){
flag=true;
break;
}
}
if(flag) continue;
now=i;
for(int j=1;j<=20;j++){
if(now>r) break;
ans=ans+((r/now)-(l/now))%mod;
if(l%now==0) ++ans;
if(now>sqrt(r)) ++res;
ans%=mod;
now=now*i;
if(j==1&&i!=2&&i!=3&&i!=5&&i!=7&&i!=11&&i!=13&&i!=17&&i!=19&&i!=23&&i!=29)
break;
if(i==1) break;
}
ans%=mod;
}
ans=(ans+(r-(ll)(sqrt(r)))%mod)%mod;
ans=(ans-res+mod)%mod;
cout<<ans<<endl;
return 0;
}
*/
/*
//暴力五十五分,也是需要想一想的,所以发上来了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
const int mod=998244353;
ll l,r,ans=0;
int main(){
cin>>l>>r;
for(int i=1;i<=r;i++){
ans=ans+((r/i)-(l/i))%mod;
ans%=mod;
if(l%i==0) ans=ans+1;
ans%=mod;
}
ans%=mod;
cout<<ans<<endl;
return 0;
}
*/