#pragma warning disable using System; using System.IO; using System.Linq; using System.Diagnostics; using System.Collections; using System.Collections.Generic; using System.Runtime.CompilerServices; using static System.Console; using static System.Math; using static Util; class Util { public const long m107 = 1000000007; public const long m998 = 998244353; public const int a10_9 = 1000000000; public const long a10_18 = 1000000000000000000; public const int iinf = 1 << 30; public const long linf = (1l << 61) - (1l << 31); /// 1行読みこみ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static string read() => ReadLine(); /// 1行読みこみ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static string readln() => ReadLine(); /// 1行読みこみ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static string readline() => ReadLine(); /// 改行なし出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void write() => Write(""); /// 改行なし出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void write(T value) => Write(value); /// 改行あり出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void writeln() => WriteLine(""); /// 改行あり出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void writeln(T value) => WriteLine(value); /// 改行あり出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void writeline() => WriteLine(""); /// 改行あり出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void writeline(T value) => WriteLine(value); /// 改行なし出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void print() => Write(""); /// 改行なし出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void print(T value) => Write(value); /// 改行あり出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void println() => WriteLine(""); /// 改行あり出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void println(T value) => WriteLine(value); /// 改行あり出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void printline() => WriteLine(""); /// 改行あり出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void printline(T value) => WriteLine(value); /// 任意の要素数・初期値の配列を作って初期化する [MethodImpl(MethodImplOptions.AggressiveInlining)] public static T[] makearr(int num, T value) { var arr = new T[num]; for (int i = 0; i < num; ++i) arr[i] = value; return arr; } // end of func /// 任意の要素数・初期値の2次元配列を作って初期化する [MethodImpl(MethodImplOptions.AggressiveInlining)] public static T[][] makearr2(int height, int width, T value) { var arr = new T[height][]; for (int i = 0; i < height; ++i) { arr[i] = new T[width]; for (int j = 0; j < width; ++j) { arr[i][j] = value; } } return arr; } // end of func /// 任意の要素数・初期値の3次元配列を作って初期化する [MethodImpl(MethodImplOptions.AggressiveInlining)] public static T[][][] makearr3(int height, int width, int depth, T value) { var arr = new T[height][][]; for (int i = 0; i < height; ++i) { arr[i] = new T[width][]; for (int j = 0; j < width; ++j) { arr[i][j] = new T[depth]; for (int k = 0; k < depth; ++k) { arr[i][j][k] = value; } } } return arr; } // end of func /// 任意の要素数・初期値のListを作って初期化する [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List makelist(int num, T value) { return new List(makearr(num, value)); } // end of func /// 任意の要素数・初期値の2次元Listを作って初期化する [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List> makelist2(int height, int width, T value) { var arr = new List>(); for (int i = 0; i < height; ++i) { arr.Add(makelist(width, value)); } return arr; } // end of func /// 任意の要素数・初期値の3次元Listを作って初期化する [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List>> makelist3(int height, int width, int depth, T value) { var arr = new List>>(); for (int i = 0; i < height; ++i) { arr[i] = new List>(); for (int j = 0; j < width; ++j) { arr[i].Add(makelist(depth, value)); } } return arr; } // end of func /// 1次元配列のディープコピーを行う [MethodImpl(MethodImplOptions.AggressiveInlining)] public static T[] copyarr(T[] arr) { T[] brr = new T[arr.Length]; Array.Copy(arr, brr, arr.Length); return brr; } // end of func /// 2次元配列のディープコピーを行う [MethodImpl(MethodImplOptions.AggressiveInlining)] public static T[][] copyarr2(T[][] arr) { T[][] brr = new T[arr.Length][]; for (int i = 0; i < arr.Length; ++i) { brr[i] = new T[arr[i].Length]; Array.Copy(arr[i], brr[i], arr[i].Length); } return brr; } // end of func /// 3次元配列のディープコピーを行う [MethodImpl(MethodImplOptions.AggressiveInlining)] public static T[][][] copyarr3(T[][][] arr) { T[][][] brr = new T[arr.Length][][]; for (int i = 0; i < arr.Length; ++i) { brr[i] = new T[arr[i].Length][]; for (int j = 0; j < arr[i].Length; ++j) { brr[i][j] = new T[arr[i][j].Length]; Array.Copy(arr[i][j], brr[i][j], arr[i][j].Length); } } return brr; } // end of func /// 1次元Listのディープコピーを行う [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List copylist(List list) { return new List(list); } // end of func /// 2次元Listのディープコピーを行う [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List> copylist2(List> list) { List> list2 = new List>(); for (int i = 0; i < list.Count; ++i) { list2.Add(new List(list[i])); } return list2; } // end of func /// 3次元Listのディープコピーを行う [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List>> copylist3(List>> list) { List>> list2 = new List>>(); for (int i = 0; i < list.Count; ++i) { List> tmplist = new List>(); for (int j = 0; j < list[i].Count; ++i) { tmplist.Add(new List(list[i][j])); } list2.Add(tmplist); } return list2; } // end of func /// 1次元Listを出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void printlist(List list) { WriteLine(string.Join(" ", list)); } // end of func /// 1次元配列を出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void printlist(T[] list) { WriteLine(string.Join(" ", list)); } // end of func /// 2次元リストを出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void printlist2(List> list) { foreach (var l in list) { WriteLine(string.Join(" ", l)); } } // end of func /// 2次元配列を出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void printlist2(T[][] list) { foreach (var l in list) { WriteLine(string.Join(" ", l)); } } // end of func /// 1次元Listを出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void printarr(List list) { WriteLine(string.Join(" ", list)); } // end of func /// 1次元配列を出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void printarr(T[] list) { WriteLine(string.Join(" ", list)); } // end of func /// 2次元リストを出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void printarr2(List> list) { foreach (var l in list) { WriteLine(string.Join(" ", l)); } } // end of func /// 2次元配列を出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void printarr2(T[][] list) { foreach (var l in list) { WriteLine(string.Join(" ", l)); } } // end of func /// ジェネリックを出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void printiter(IEnumerable generic) { foreach (var it in generic) { Write(it + " "); } WriteLine(); } // end of func /// ジェネリックを出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void printlineiter(IEnumerable generic) { foreach (var it in generic) { WriteLine(it + " "); } } // end of func /// 数字を1つint型で読み込み [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int readint() { return int.Parse(ReadLine()); } // end of func /// 数字を1つlong型で読み込み [MethodImpl(MethodImplOptions.AggressiveInlining)] public static long readlong() { return long.Parse(ReadLine()); } // end of func /// 入力を空白区切りのstringで返す(変則的な入力に対応) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static string[] readsplit() { return ReadLine().Split(' '); } // end of func /// 数字をスペース区切りでint型で入力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int[] readints() { return ReadLine().Split(' ').Select(_ => int.Parse(_)).ToArray(); } // end of func /// 数字をスペース区切りでlong型で入力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static long[] readlongs() { return ReadLine().Split(' ').Select(_ => long.Parse(_)).ToArray(); } // end of func /// 数字をスペース区切りでfloat型で入力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float[] readfloats() { return ReadLine().Split(' ').Select(_ => float.Parse(_)).ToArray(); } // end of func /// 数字をスペース区切りでdouble型で入力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static double[] readdoubles() { return ReadLine().Split(' ').Select(_ => double.Parse(_)).ToArray(); } // end of func /// 文字列をスペース区切りで入力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static string[] readstrings() { return ReadLine().Split(' '); } // end of func /// 読み込んだint2つをタプルで返す(分解代入用) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (int, int) readintt2() { var arr = readints(); return (arr[0], arr[1]); } // end of func /// 読み込んだint3つをタプルで返す(分解代入用) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (int, int, int) readintt3() { var arr = readints(); return (arr[0], arr[1], arr[2]); } // end of func /// 読み込んだint4つをタプルで返す(分解代入用) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (int, int, int, int) readintt4() { var arr = readints(); return (arr[0], arr[1], arr[2], arr[3]); } // end of func /// 読み込んだlong2つをタプルで返す(分解代入用) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (long, long) readlongt2() { var arr = readlongs(); return (arr[0], arr[1]); } // end of func /// 読み込んだ数long3つをタプルで返す(分解代入用) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (long, long, long) readlongt3() { var arr = readlongs(); return (arr[0], arr[1], arr[2]); } // end of func /// 読み込んだ数long4つをタプルで返す(分解代入用) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (long, long, long, long) readlongt4() { var arr = readlongs(); return (arr[0], arr[1], arr[2], arr[3]); } // end of func /// 読み込んだfloat2つをタプルで返す(分解代入用) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (float, float) readfloatt2() { var arr = readfloats(); return (arr[0], arr[1]); } // end of func /// 読み込んだfloat3つをタプルで返す(分解代入用) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (float, float, float) readfloatt3() { var arr = readfloats(); return (arr[0], arr[1], arr[2]); } // end of func /// 読み込んだfloat4つをタプルで返す(分解代入用) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (float, float, float, float) readfloatt4() { var arr = readfloats(); return (arr[0], arr[1], arr[2], arr[3]); } // end of func /// 読み込んだdouble2つをタプルで返す(分解代入用) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (double, double) readdoublet2() { var arr = readdoubles(); return (arr[0], arr[1]); } // end of func /// 読み込んだdouble3つをタプルで返す(分解代入用) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (double, double, double) readdoublet3() { var arr = readdoubles(); return (arr[0], arr[1], arr[2]); } // end of func /// 読み込んだdouble4つをタプルで返す(分解代入用) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (double, double, double, double) readdoublet4() { var arr = readdoubles(); return (arr[0], arr[1], arr[2], arr[3]); } // end of func /// 読み込んだstring2つをタプルで返す(分解代入用) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (string, string) readstringt2() { var arr = ReadLine().Split(' '); return (arr[0], arr[1]); } // end of func /// 読み込んだstring3つをタプルで返す(分解代入用) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (string, string, string) readstringt3() { var arr = ReadLine().Split(' '); return (arr[0], arr[1], arr[2]); } // end of func /// 読み込んだstring3つをタプルで返す(分解代入用) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (string, string, string, string) readstringt4() { var arr = ReadLine().Split(' '); return (arr[0], arr[1], arr[2], arr[3]); } // end of func /// 先頭に要素数(int)と次にでかい数字1つ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (int, long) readintlongt2() { var arr = ReadLine().Split(' ').Select(x => long.Parse(x)).ToArray(); return ((int)arr[0], arr[1]); } // end of func /// 先頭に要素数(int)と次にでかい数字2つ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (int, long, long) readintlongt3() { var arr = ReadLine().Split(' ').Select(x => long.Parse(x)).ToArray(); return ((int)arr[0], arr[1], arr[2]); } // end of func /// 先頭に要素数(int)と次にでかい数字2つ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (int, long, long, long) readintlongt4() { var arr = ReadLine().Split(' ').Select(x => long.Parse(x)).ToArray(); return ((int)arr[0], arr[1], arr[2], arr[3]); } // end of func /// 小数点以下を16桁で表示(精度が厳しい問題に対応) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void WriteLine16(T num) { WriteLine(string.Format("{0:0.################}", num)); } // end of func /// 整数を二進数で表示 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void WriteLine2bit(int num) { WriteLine(Convert.ToString(num, 2)); } // end of func /// 整数を二進数で表示 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void WriteLine2bit(long num) { WriteLine(Convert.ToString(num, 2)); } // end of func /// 整数を2進数表現した文字列に [MethodImpl(MethodImplOptions.AggressiveInlining)] public static string IntToString2bit(int num) { return Convert.ToString(num, 2); } // end of func /// 整数を2進数表現した文字列に [MethodImpl(MethodImplOptions.AggressiveInlining)] public static string LongToString2bit(long num) { return Convert.ToString(num, 2); } // end of func /// 出力のflush削除 [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void preprocess() { var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }; System.Console.SetOut(sw); } // end of func /// 出力をflush [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void finalprocess() { System.Console.Out.Flush(); } // end of func } // end of class /// Dictionayに初期値を与える(RubyのHash.new(0)みたいに) class HashMap : Dictionary { new public V this[K i] { get { V v; return TryGetValue(i, out v) ? v : base[i] = default(V); } set { base[i] = value; } } } // end of class /// Dictionayに初期値を与える(RubyのHash.new(0)みたいに) class SortedMap : SortedDictionary { new public V this[K i] { get { V v; return TryGetValue(i, out v) ? v : base[i] = default(V); } set { base[i] = value; } } } // end of class /// 座標に便利(値型だけど16byteまではstructが速い) struct YX { public int y; public int x; public YX(int y, int x) { this.y = y; this.x = x; } // デバッグ出力 [MethodImpl(MethodImplOptions.AggressiveInlining)] public override string ToString() => $"y:{y} x:{x}"; } // end of class /// グラフをするときに(値型だけど16byteまではstructが速い) struct Edge : IComparable { public int from; public int to; public long cost; public Edge(int from, int to, long cost) { this.from = from; this.to = to; this.cost = cost; } /// コスト順にソートできるように [MethodImpl(MethodImplOptions.AggressiveInlining)] public int CompareTo(Edge opp) => this.cost.CompareTo(opp.cost); /// デバッグ出力用 [MethodImpl(MethodImplOptions.AggressiveInlining)] public override string ToString() => $"cost:{cost} from:{from} to:{to}"; } // end of class class Kyopuro { public static void Main() { preprocess(); var kyopuro = new Kyopuro(); kyopuro.Solve(); finalprocess(); } // end of func public void Solve() { var (a, b) = readlongt2(); if (a >= 0 && b >= 0) { writeline(a % b); } else if (a <= 0 && b <= 0) { writeline((-a) % (-b)); } else if (a < 0 && b >= 0) { long bb = b; while (bb + a < 0) { bb *= b; } writeline((a + bb) % b); } else { writeline(a % (-b)); } } // end of method } // end of class