The AcquireTokenByUsernamePassword method is expecting an IEnumerable for the scopes so i believe that's what is complaining about I would suggest you try
$Scopes = New-Object System.Collections.Generic.List[string]
$Scopes.Add("https://outlook.office365.com/IMAP.AccessAsUser.All")
$Scopes.Add("https://outlook.office365.com/SMTP.Send")
$securePass = ConvertTo-SecureString $Pass -AsPlainText -Force
$Options = [Microsoft.Identity.Client.PublicClientApplicationOptions]::new()
$Options.ClientId = $ClientID
$Options.TenantId = $TenantID
# $Options.RedirectUri = $RedirectUri
$PublicClientApplication = [Microsoft.Identity.Client.PublicClientApplicationBuilder]::CreateWithApplicationOptions($Options).Build()
$AuthToken = $PublicClientApplication.AcquireTokenByUsernamePassword($Scopes, $UserName, $securePass).ExecuteAsync().GetAwaiter().GetResult()
which works okay for me